Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 恒定值超出霓虹灯内部设置的范围_C_Compiler Errors_Android Ndk_Arm_Neon - Fatal编程技术网

C 恒定值超出霓虹灯内部设置的范围

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':

我正在编译以下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':
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'