2016-09-01 8 views
1

Заглушки SPARC V8 Processor Государственный реестр (PSR) содержит бит, чтобы включить/отключить ловушки (ET), как указано в СПАРК Architecture Manual 8-й версии доступны на http://sparc.org/technical-documents/GNU AS SPARC V8E частичная WRPSR

Отключение ловушек не является атомарная операция, как явно указано в руководстве:

Если ловушки разрешены (ET = 1), необходимо соблюдать осторожность, если программное обеспечение, чтобы отключить их (ET = 0). Поскольку последовательность «RDPSR, WRPSR» прерывается - разрешается изменять PSR между двумя инструкциями - эта последовательность не является надежным механизмом для отключения ловушек.

Embedded Дополнение к СПАРК-V8 СПАРК-V8E добавляет частичную инструкцию WRPSR смягчать это:

Когда инструкция WRPSR с не нулевой RD выполняется, только некоторые поля PSR написаны а не все определенные поля PSR. Отображение полей «RD =>» - tbd. Однако:

RD = 0: все поля, написанные (для совместимости)

RD = TBD: только ET написано.

Вторая точка позволяет преодолеть явно выраженную слабость V8 (примечание по программированию инструкции WRPSR, изложенное выше).

У меня есть реализация на моем столе, поддерживающая ее, но мне интересно, как ее использовать, поскольку, насколько я понимаю, GNU Assembler (GAS) не поддерживает эту инструкцию. Единственный способ я знаю, чтобы написать немедленно или зарегистрировать значение% НСР с мов:

mov %g0, %psr/mov 0, %psr 

Глядя на GNU источников Binutils GAS, я понимаю, что нет синтаксис для указания RD часть инструкции кода и, следовательно, не имеет возможности атомизировать ET = 0 с GNU AS. Или мне что-то не хватает?

Я заметил некоторые параметры командной строки Av8plusX в руководстве GAS, но ни один из них не связан с V8E или частичным WRPSR.

Есть ли какой-либо синтаксис GAS или другой способ испускать эту инструкцию на выходе? Если это невозможно, что мне нужно знать, чтобы создать патч? Как должен выглядеть синтаксис?

Есть ли какой-либо компилятор, поддерживающий частично WRPSR? Недавно я проверил LLVM для поддержки SPARC, но он все еще был экспериментальным/неполным.

Спасибо.

ответ

0

В то же время я узнал, что можно вставить непосредственно в ассемблере, используя константу вместо инструкции, например, как показано ниже, чтобы отключить ловушки:

.word 0x83880000 

Обратите внимание, что если вы используете частичный wrpsr на процессоре, у которого его нет, тогда он будет действовать как нормальный wrpsr, поэтому вам нужно быть осторожным при перемещении программного обеспечения между системами.

Кредит: https://groups.yahoo.com/neo/groups/LEON_SPARC/conversations/topics/24733