6. Processor state

ARMv8-A相關(guān)歷史文章:

AArch64沒有類似于ARMv7-A的CPSR(Current Program Status Register),在AArch64中對應(yīng)CPSR的各個字段可以獨立提供,這些都統(tǒng)稱為PSTATE(Processor State),AArch64中有操作PSTATE中字段的指令。
PSTATE字段的定義有如下:


PSTATE字段可以通過特殊用途的寄存器來訪問,通過MRS指令讀取,通過MSR指令來寫入。
特殊寄存器為:

比如,訪問SPSel:

MRS  X0,  SPSel    //Read SPSel into X0
MSR  SPSel,  X0    //Write X0 to SPSel

異常處理函數(shù),能從使用SP_ELn切換到使用SP_EL0。
SP_EL1可能指向一塊內(nèi)存,其中包含內(nèi)核保證能用的小片棧區(qū),SP_EL0可能指向一個更大的內(nèi)核任務(wù)棧,但不是不能保證不會溢出,可以通過寫入SPSel比特位來進行切換:

MSR  SPSel,  #0    // switch to SP_EL0
MSR  SPSel,  #1    // switch to the SP of the current Exception Level ELn

下邊的操作也能對PSTATE中的字段進行處理:



比如:

MSR  DAIFSet,  #Imm4    // used to set any or all of DAIF to 1
MSR  DAIFClr,  #Imm4    // used to clear any or all of DAIF to 0
MSR  SPSel,  #Imm1       // used to select the stack pointer, between SP_EL0 and SP_ELn

在AArch64,中,在異常中通過執(zhí)行ERET指令來返回,這個過程會將SPSR_ELn的內(nèi)容拷貝到PSTATE中。ALU標(biāo)志、執(zhí)行狀態(tài)、Exception Level和Processor branch都會被保存,從ELR_ELn中返回后,將繼續(xù)執(zhí)行。
PSTATE{N, Z, C, V}字段可以在EL0被訪問,其他的PSTATE字段能被EL1或更高的Exception Level訪問。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容