新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM中的預取命令pld的使用

        ARM中的預取命令pld的使用

        作者: 時間:2016-11-22 來源:網絡 收藏
        Kernel version:2.6.14

        CPU architecture:ARM920T

        本文引用地址:http://www.104case.com/article/201611/320011.htm

        最近在分析ARM Linux的copy_from_user,主要功能由__arch_copy_from_user實現,該函數定義在linux/arch/arm/lib/uaccess.S文件中,使用匯編實現,部分源碼如下:

        [plain]view plaincopy
        print?
        1. ENTRY(__arch_copy_from_user)
        2. stmfdsp!,{r0,r2,r4-r7,lr}
        3. cmpr2,#4
        4. blt.cfu_not_enough
        5. PLD(pld[r1,#0])//因為后面要用到r0和r1,所有進行預讀取,加速存儲器的訪問
        6. PLD(pld[r0,#0])
        7. andsip,r0,#3
        8. bne.cfu_dest_not_aligned
        9. .cfu_dest_aligned:
        10. andsip,r1,#3
        11. bne.cfu_src_not_aligned
        12. ...
        這段代碼中用到了預讀取指令pld(preload),大寫的PLD是一個宏,其定義如下(linux/include/asm-arm/assembler.h):

        [plain]view plaincopy
        print?
        1. #if__LINUX_ARM_ARCH__>=5
        2. #definePLD(code...)code
        3. #else
        4. #definePLD(code...)
        5. #endif
        pld,即預讀取指令,pld指令只在armv5以上版本有效。使用pld指令可以提示ARM預先把cache line填充好。pld指令中的offset很有講究。一般為64-byte的倍數。
        功能:cache預讀取(PLD,PreLoad),使用pld指示存儲系統從后面幾條指令所指定的存儲器地址讀取,存儲系統可使用這種方法加速以后的存儲器訪問。
        格式:pld[Rn,{offset}]
        其中:
        • Rn 存儲器的基址寄存器。
        • Offset 加在Rn上的偏移量。


        關鍵詞: ARM中預取命令pl

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 射洪县| 普陀区| 道孚县| 仁怀市| 华容县| 进贤县| 铜川市| 仙居县| 南投市| 彩票| 阳春市| 岑溪市| 涟水县| 吉安县| 南华县| 渭南市| 维西| 萨嘎县| 马龙县| 屯门区| 贵州省| 古田县| 嵊泗县| 班戈县| 罗定市| 开原市| 额济纳旗| 佛教| 陆丰市| 房山区| 芦山县| 怀仁县| 乐安县| 宜兰市| 宣恩县| 沅江市| 志丹县| 安龙县| 广汉市| 道孚县| 楚雄市|