Package: gcc-4.9-aarch64-linux-gnu
Version: 4.9.2-10
Severity: normal
The command: aarch64-linux-gnu-gcc -static -o test arm_neon_sample.c
Works native aarch64-linux-gnu-gcc in sid, as well with cross-gcc provided
by linaro (9-2014.09). Cross-compiler in this package fails:
aarch64-linux-gnu-gcc -o test arm_neon_sample.c
In file included from arm_neon_sample.c:2:0:
/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h: In function
'vqadd_u8':
/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h:2116:3: error:
incompatible types when returning type 'int' but 'uint8x8_t' was expected
return __builtin_aarch64_uqaddv8qi_uuu (__a, __b);
^
/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h: In function
'vqadd_u16':
/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h:2122:3: error:
incompatible types when returning type 'int' but 'uint16x4_t' was expected
return __builtin_aarch64_uqaddv4hi_uuu (__a, __b);
^
...
Actual arm_neon.h comes from libgcc-4.9-dev:arm64 so I think this is
something that got misconfigured while compiling the cross-compiker
Riku
#include <stdio.h>
#include <arm_neon.h> //need to include this ifyou want to use intrinsics
int main(){
//vector addition 8x8 example.
uint8x8_t vec_a, vec_b, vec_dest; //a vector of 8 8bit ints
vec_a = vdup_n_u8(9);
vec_b = vdup_n_u8(10);
vec_dest = vec_a * vec_b; //90
vec_a = vec_dest * vec_b; //90*10 = 900
vec_dest = vec_a * vec_b; //900*10 = 9000
int i = 0;
int result;
result = vget_lane_u8( vec_dest, 0 );
printf( "Lane %d: %d\n", i, result );
i++;
result = vget_lane_u8( vec_dest, 1 );
printf( "Lane %d: %d\n", i, result );
i++;
result = vget_lane_u8( vec_dest, 2 );
printf( "Lane %d: %d\n", i, result );
i++;
result = vget_lane_u8( vec_dest, 3 );
printf( "Lane %d: %d\n", i, result );
i++;
result = vget_lane_u8( vec_dest, 4 );
printf( "Lane %d: %d\n", i, result );
i++;
result = vget_lane_u8( vec_dest, 5 );
printf( "Lane %d: %d\n", i, result );
i++;
result = vget_lane_u8( vec_dest, 6 );
printf( "Lane %d: %d\n", i, result );
i++;
result = vget_lane_u8( vec_dest, 7 );
printf( "Lane %d: %d\n", i, result );
}