[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#781083: compiles fail with arm_neon.h



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 );
}

Reply to: