C 恒定值超出霓虹灯内部设置的范围
我正在编译以下ARM NEON intrinsics测试代码(在带有Android NDK的Eclipse中): 但我一直收到以下编译器错误:C 恒定值超出霓虹灯内部设置的范围,c,compiler-errors,android-ndk,arm,neon,C,Compiler Errors,Android Ndk,Arm,Neon,我正在编译以下ARM NEON intrinsics测试代码(在带有Android NDK的Eclipse中): 但我一直收到以下编译器错误: /home/developer/adt/ndk/ndk-build all Install : libneon_test.so => libs/armeabi/libneon_test.so Compile thumb : neon_test <= neon.c jni/neon.c: In function 'foo':
/home/developer/adt/ndk/ndk-build all
Install : libneon_test.so => libs/armeabi/libneon_test.so
Compile thumb : neon_test <= neon.c
jni/neon.c: In function 'foo':
jni/neon.c:17:1: error: constant out of range
make: *** [obj/local/armeabi-v7a/objs/neon_test/neon.o] Error 1`
/home/developer/adt/ndk/ndk build all
安装:libneon_test.so=>libs/armeabi/libneon_test.so
编译拇指:霓虹灯测试问题在这一行
b = vext_u64 (a, a, 3);
您不能将3
作为vext\u u64
的班次
在这方面,neon Intrinsic的gcc
似乎不如armcc
好
理解这种行为的一个技巧是将-S
传递到gcc
以将代码转换为程序集,然后尝试编译该程序集文件。这样gcc将准确地告诉您哪一行给出了问题
$ ~/bin/android-ndk-r8d/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=/home/auselen/bin/android-ndk-r8d/platforms/android-14/arch-arm -std=c99 -S neon.c -mfloat-abi=softfp -mfpu=neon -O2
neon.c: In function 'foo':
neon.c:11:1: error: constant out of range
$ ~/bin/android-ndk-r8d/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=/home/auselen/bin/android-ndk-r8d/platforms/android-14/arch-arm -std=c99 -c neon.s -mfloat-abi=softfp -mfpu=neon -O2
neon.s: Assembler messages:
neon.s:28: Error: shift out of range -- `vext.64 d16,d16,d16,#3'
它说的是什么常数?您发布的代码的第17行是}大括号。是值3吗?这就是问题所在,我也不知道。编译器总是将此错误指向没有意义的最后一个}大括号。我想这可能是一个带有NEON的GCC错误,所以我正在寻找一些解决方法。我认为用户删除的答案是正确的。你期望什么vext_u64(a,a,3)
做什么?我在使用vecTmp=vrshrn_n_u32(vec128b,15+8)时也有同样的问题代码>,常数不能大于16,但实际上约束应为0-31。我想是安卓gcc工具链的bug吧?
uint64x1_t vext_u64(uint64x1_t a, uint64x1_t b, __constrange(0,0) int c); // VEXT.64 d0,d0,d0,#0
$ ~/bin/android-ndk-r8d/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=/home/auselen/bin/android-ndk-r8d/platforms/android-14/arch-arm -std=c99 -S neon.c -mfloat-abi=softfp -mfpu=neon -O2
neon.c: In function 'foo':
neon.c:11:1: error: constant out of range
$ ~/bin/android-ndk-r8d/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=/home/auselen/bin/android-ndk-r8d/platforms/android-14/arch-arm -std=c99 -c neon.s -mfloat-abi=softfp -mfpu=neon -O2
neon.s: Assembler messages:
neon.s:28: Error: shift out of range -- `vext.64 d16,d16,d16,#3'