大佬教程收集整理的这篇文章主要介绍了NEON内在函数不断超出范围,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
void foo(uint64_t* Res) { uint64_t x = 0xff12aa8902acf78dULL; uint64x1_t a,b; a = vld1_u64 (&X); b = vext_u64 (a,a,3); vst1_u64 (Res,b); }
但我不断收到以下编译器@L_450_3@:
/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`
第17行是foo()的最后一个括号.
有谁知道这个奇怪的@L_450_3@可能是什么原因?
b = vext_u64 (a,3);
对于vext_u64,it isn’t allowed,您不能将3作为班次.
uint64x1_t vext_u64(uint64x1_t a,uint64x1_t b,__constrange(0,0) int c); // VEXT.64 d0,d0,#0
看起来gcc的implementation (definition?)霓虹内在函数在这方面不如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,#3'
以上是大佬教程为你收集整理的NEON内在函数不断超出范围全部内容,希望文章能够帮你解决NEON内在函数不断超出范围所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。