的SPARC V8處理器狀態寄存器(PSR)包含一個位使能/於http://sparc.org/technical-documents/GNU AS SPARC V8E部分WRPSR
禁用陷阱在SPARC架構手冊版本8提供詳細的禁止陷阱(ET)是一種非原子操作如手冊中明確說明:
如果陷阱被啓用(ET = 1),但必須如果軟件是禁用它們 (ET = 0)採取。由於「RDPSR,WRPSR」序列是可中斷的 - 允許在兩條指令之間更改PSR - 該序列不是可靠的 機制來禁用陷阱。
嵌入式補充SPARC-V8 SPARC-V8E增加了一個局部WRPSR指令來減輕此:
當執行與非空RD一個WRPSR指令,僅 PSR的某些字段被寫入而不是所有PSR定義的字段。映射「RD =>字段」是tbd。但是:
RD = 0:寫入(兼容性)的所有字段
RD = TBD:僅ET被寫入。
第二點允許克服V8(上述WRPSR指令的編程註釋)的明確缺點。
我的桌面上有一個支持它的實現,但我不知道如何使用它,因爲據我瞭解,GNU彙編程序(GAS)不支持此指令。我知道寫的即時或寄存器值%PSR的唯一方法是MOV:
mov %g0, %psr/mov 0, %psr
通過查看GNU binutils的氣源,據我所知,沒有語法指定指令的RD一部分代碼,因此無法用GNU AS自動設置ET = 0。或者我錯過了什麼?
我注意到GAS手冊中的一些-Av8plusX命令行選項,但它們中沒有一個似乎與V8E或部分WRPSR相關。
是否有任何GAS語法或其他方式將此指令發送到輸出?如果不可能,我需要知道什麼才能創建補丁?語法應該如何?
是否有任何支持部分WRPSR的編譯器?我最近檢查了LLVM是否支持SPARC,但它仍然是實驗/不完整的。
謝謝。