[譯] ARMv8-A架構(gòu)基礎(chǔ)之ARMv8-A指令集

A64指令集與現(xiàn)有的A32指令集相似。 指令本身仍然是32位寬,并且具有相似的語(yǔ)法。

指令集使用ARMv8-A體系結(jié)構(gòu)中的通用命名約定,所以原始的32位指令集狀態(tài)現(xiàn)在稱作:

A32
當(dāng)處于AArch32狀態(tài)時(shí),指令集在很大程度上與ARMv7-A兼容,雖然有些不同。 它還提供了一些新指令,這些指令和A64指令集中引入的一些特性相匹配。

T32
Thumb指令集首次在ARM7TDMI處理器中引入,最初只包含16位指令。 以一些性能為代價(jià),16位指令提供了更小的程序。 ARMv7-A處理器(包括Cortex-A系列中的處理器)支持Thumb-2技術(shù),該技術(shù)擴(kuò)展了Thumb指令集以提供16位和32位指令的混合。 這使得性能與ARM相似,同時(shí)保留了較小的代碼大小。由于其尺寸和性能優(yōu)勢(shì),所有32位代碼利用Thumb-2技術(shù)進(jìn)行編譯或匯編以的趨勢(shì)越來(lái)越普遍。

按照命名約定,并反映64位操作,AArch64的指令集稱為A64

所有A64指令的長(zhǎng)度都是相同的,不同于T32—它是一個(gè)可變長(zhǎng)度的指令集。 這使的管理和跟蹤生成的代碼序列更容易,特別是對(duì)動(dòng)態(tài)代碼生成器的影響。

在指令集之間切換

在單個(gè)應(yīng)用程序中使用來(lái)自兩個(gè)執(zhí)行狀態(tài)的代碼是不可能的。 在ARMv8-A中A64 和A32/T32指令集之間沒(méi)有像在A32和T32指令集之間有交互工作。 用A64 給ARMv8-A處理器編寫的代碼不能在ARMv7-ACortex?-A系列處理器上運(yùn)行。 但是,為ARMv7-A處理器編寫的代碼可以在AArch32執(zhí)行狀態(tài)下的ARMv8-A處理器上運(yùn)行。 下圖總結(jié)了這一點(diǎn)。

switching_instruction_sets.png

尋址

當(dāng)處理器可以將64位值存儲(chǔ)在單個(gè)寄存器中時(shí),在程序中訪問(wèn)大量?jī)?nèi)存就變得簡(jiǎn)單多了。 在32位硬件核上執(zhí)行的單個(gè)線程只能訪問(wèn)4GB的地址空間。 該可尋址空間的大部分被保留供操作系統(tǒng)內(nèi)核,庫(kù)代碼,外圍設(shè)備等使用。 因此,地址空間不足意味著程序在執(zhí)行時(shí)可能需要將一些數(shù)據(jù)映射進(jìn)或替換出內(nèi)存。 有一個(gè)更大的地址空間—有64位指針,避免了這個(gè)問(wèn)題。 這也使得內(nèi)存映射文件等技術(shù)更具吸引力和更方便使用。 即使物理RAM可能不足以包含整個(gè)文件,文件內(nèi)容也會(huì)映射到線程的內(nèi)存映射中。


原文
https://developer.arm.com/products/architecture/a-profile/docs/100878/latest/the-armv8-a-instruction-sets

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

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

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