ARM中的预取命令pld的使用

   2019-03-28 55
核心提示:[db:简介]

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!, {r0, r2, r4 - r7, lr} 
        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,{offset}]
其中:

Rn         存储器的基址寄存器。
Offset     加在Rn上的偏移量。

 
举报收藏 0打赏 0
 
更多>同类数控技术
推荐图文
推荐数控技术
点击排行
网站首页  |  关于我们  |  升级会员  |  联系客服  |  广告合作  |  广告位图  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  RSS订阅  |  违规举报  |  蜀ICP备2021024440号