Заглушки 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, но он все еще был экспериментальным/неполным.
Спасибо.