2016-09-01 54 views
1

的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,但它仍然是實驗/不完整的。

謝謝。

回答

0

在我瞭解到,一個可代替指令的使用不斷將其直接插入彙編代碼的同時,例如下文禁用陷阱:

.word 0x83880000 

請注意,如果您使用部分wrpsr功能在沒有它的處理器上,那麼它將作爲正常的wrpsr,因此在系統之間移動軟件時需要小心。

圖片來源:https://groups.yahoo.com/neo/groups/LEON_SPARC/conversations/topics/24733