当前位置: 代码迷 >> 汇编语言 >> 请问ARM中的预取命令PLD的使用
  详细解决方案

请问ARM中的预取命令PLD的使用

热度:237   发布时间:2016-05-02 04:52:55.0
请教ARM中的预取命令PLD的使用
我现在在看android2.3.3提供的关于ARM平台的memcmp这个函数的实现代码,它是用汇编编写的,如下:
   .text

    .global __memcmp16
    .type __memcmp16, %function
    .align 4

/*
 * Optimized memcmp16() for ARM9.
 * This would not be optimal on XScale or ARM11, where more prefetching
 * and use of PLD will be needed.
 * The 2 major optimzations here are
 * (1) The main loop compares 16 bytes at a time
 * (2) The loads are scheduled in a way they won't stall
 */

__memcmp16:
        .fnstart
        PLD         (r0, #0)
        PLD         (r1, #0)

        /* take of the case where length is nul or the buffers are the same */
        cmp         r0, r1
        cmpne       r2, #0
        moveq       r0, #0
        bxeq        lr

        /* since r0 hold the result, move the first source
         * pointer somewhere else
         */

        mov         r3, r0

         /* make sure we have at least 12 words, this simplify things below
          * and avoid some overhead for small blocks
          */

        cmp         r2, #12
        bpl         0f

        /* small blocks (less then 12 words) */
        PLD         (r0, #32)
        PLD         (r1, #32)

1:      ldrh        r0, [r3], #2
        ldrh        ip, [r1], #2
        subs        r0, r0, ip
        bxne        lr        
        subs        r2, r2, #1
        bne         1b
  相关解决方案