cornsea

arm的按条件执行指令的功能

arm的条件执行功能可以避免执行jmp指令,但每条指令都判断一次条件。

和x86对比的汇编代码如下。

C语言代码如下:
int b;
int test(int a) {
        if (a>0)
                return a+b;
        return b;
}

分别用arm gcc 4.3.3 和x86 gcc 4.3.3 加-O2 -S选项 生成汇编代码。

arm的汇编代码如下:
test:
        .fnstart
.LFB2:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        cmp     r0, #0
        ldrgt   r3, .L5
        ldrle   r3, .L5
        ldrgt   r2, [r3, #0]
        ldrle   r0, [r3, #0]
        addgt   r0, r0, r2
        bx      lr
.L6:
        .align  2
.L5:
        .word   b

x86的汇编代码如下:
test:
        pushl   %ebp
        movl    %esp, %ebp
        movl    8(%ebp), %eax
        testl   %eax, %eax
        jle     .L2
        addl    b, %eax
        popl    %ebp
        ret
        .p2align 4,,7
        .p2align 3
.L2:
        movl    b, %eax
        popl    %ebp
        ret
        .size   test, .-test
        .comm   b,4,4

posted on 2009-09-17 09:34  cornsea  阅读(966)  评论(0编辑  收藏  举报

导航