arm中的預取命令pld的使用
kernel version:2.6.14
cpu architecture:arm920t
最近在分析arm linux的copy_from_user,主要功能由__arch_copy_from_user實現,該函式定義在linux/arch/arm/lib/uaccess.s檔案中,使用彙編實現,部分原始碼如下:
[plain]view plain
copy
print?
entry(__arch_copy_from_user)
stmfd sp!,
cmp r2, #4
blt .cfu_not_enough
pld( pld [r1, #0] )//因為後面要用到r0和r1,所有進行預讀取,加速儲存器的訪問
pld( pld [r0, #0] )
ands ip, r0, #3
bne .cfu_dest_not_aligned
.cfu_dest_aligned:
ands ip, r1, #3
bne .cfu_src_not_aligned
...
這段**中用到了預讀取指令pld(preload),大寫的pld是乙個巨集,其定義如下(linux/include/asm-arm/assembler.h):
[plain]view plain
copy
print?
#if __linux_arm_arch__ >= 5
#define pld(code...) code
#else
#define pld(code...)
#endif
pld,即預讀取指令,pld指令只在armv5以上版本有效。使用pld指令可以提示arm預先把cache line填充好。pld指令中的offset很有講究。一般為64-byte的倍數。
功能:cache預讀取(pld,preload),使用pld指示儲存系統從後面幾條指令所指定的儲存器位址讀取,儲存系統可使用這種方法加速以後的儲存器訪問。
格式:pld[rn,]
其中:
ARM中的預取命令pld的使用
arm中的預取命令pld的使用 kernel version 2.6.14 cpu architecture arm920t 最近在分析arm linux的copy from user,主要功能由 arch copy from user實現,該函式定義在linux arch arm lib uacc...
ARM彙編中的標號使用
參考自 1 標號 在arm 彙編中,標號代表乙個位址,段內標號的位址在彙編時確定,而段外標號的位址值在連線時確定。根據標號的生成方式,可以有以下3 鐘 基於pc 的標號 基於pc 的標號時位於目標指令前的標號或程式中的資料定義偽指令前的標號,這種標號在彙編時將被處理成pc 值加上或減去乙個數字常量。...
「預取址」與「突發傳輸」的概念
預取址 在一些應用中我們會遇到 可預取 記憶體的概念,可預取性是指儲存器空間的可預取能力。如果讀操作沒有 即如同從 ram 中讀資料一樣不會破壞資料 則稱儲存器空間可預取。必要時可將位元組寫操作合併成乙個雙字寫操作。可預取是讀取一次以後不會改變讀取位址和儲存狀態的任何改變,cpu 可快取它的內容並且...