Im biên dịch mã intrinsics NEON thử nghiệm ARM sau (trong Eclipse với Android NDK):liên tục ra khỏi phạm vi với intrinsics 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);
}
nhưng tôi tiếp tục nhận được lỗi biên dịch sau:
/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`
Dòng 17 là cú đúp }
cuối cùng của foo()
.
Có ai có ý tưởng về nguyên nhân gây ra lỗi lạ này không?
nó liên tục nói về điều gì? Dòng 17 của mã bạn đăng là cú đúp. Nó có phải là giá trị 3 không? – ThePosey
Đó là vấn đề, tôi cũng không biết. Trình biên dịch luôn trỏ lỗi này đến cú đúp cuối cùng mà không có ý nghĩa. Tôi nghĩ rằng đây có thể là một lỗi GCC với NEON vì vậy Im tìm kiếm một số workaround có thể. – NumberFour
Tôi nghĩ câu trả lời đã xóa của ThePosey đang đi đúng hướng. Bạn đang mong đợi gì 'vext_u64 (a, a, 3)' để làm gì? –