题
我有此C代码:
int test(signed char anim_col)
{
if (anim_col >= 31) {
return 1;
} else if (anim_col <= -15) {
return -2;
}
return 0;
}
使用Android NDK R4B,使用-OS -MTHUMB将以下拇指代码编译到以下拇指代码:
test:
mov r3, #1
cmp r0, #30
bgt .L3
mov r3, #0
add r0, r0, #14
bge .L3
mov r3, #2
neg r3, r3
.L3:
mov r0, r3
bx lr
但是最新 Android NDK R5 它汇编到此损坏的代码中:
test:
mov r3, #1
cmp r0, #30
bgt .L3
lsl r0, r0, #24
lsr r0, r0, #24
mov r3, #0
cmp r0, #127 @@ WTF?! should be <= -15 @@
bls .L3
mov r3, #2
neg r3, r3
.L3:
mov r0, r3
bx lr
这似乎...奇怪。如果Anim_Col小于0,则将返回-2,而不仅仅是返回-2时返回-2时,小于或等于-15。复制的完整命令行如下:
Android-ndk-r4b/build/preduilt/linux-x86/arm-eabi-4.4.4.0/bin/arm-eabi-gcc -c-c-c -o test.o -os test.c-save-temps -mthumb
和
Android-NDK-R5/Toolchains/arm-linux-androideabi 4.4.4.3/preduilt/linux-x86/bin/arm-linux-and-linux-andoideabi-gcc -c-o test.o -os test.c-save-temps.c-save-temps -Mthumb
这是已知的海湾合作委员会错误吗?我发现很难相信,这在现实生活中不会发生!我的代码肯定错了吗?
不隶属于 StackOverflow