Compilation errors when using arm_neon.h on TX1

System:

Jetson TX1
gcc 4.9
L4T 24.1

Problem:

I am porting my project on Jetson TX1 and getting intrinsic errors in arm_neon header file, arm_neon.h: error: identifier “__builtin_aarch64_xx” is undefined

Below is my cmake:

cmake_minimum_required(VERSION 2.6.0)

project(ICP)

find_package(CUDA REQUIRED) 	  
	  
include_directories(${CUDA_INCLUDE_DIRS})

file(GLOB srcs *.cpp)
file(GLOB cuda Cuda/*.cu)
file(GLOB containers Cuda/containers/*.cpp)

set(CUDA_ARCH_BIN "53")  

SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR})
include(CudaComputeTargetFlags.cmake)                  
APPEND_TARGET_ARCH_FLAGS()

set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}  "-Xcompiler; -fPIC; -std=c++11;")
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "--ftz=true;--prec-div=false;--prec-sqrt=false")

CUDA_COMPILE(cuda_objs ${cuda})

set(CMAKE_CXX_FLAGS "-O3 -msse2 -msse3 -Wall -std=c++11")

include_directories(include)

add_library(Main SHARED Main.cpp
               ${srcs}
               ${cuda} 
               ${cuda_objs} 
               ${containers}
)

target_link_libraries(Main
                      ${CUDA_LIBRARIES}
                      ${CMAKE_DL_LIBS}
)

Here is the compile output:

[ 11%] Building NVCC (Device) object CMakeFiles/cuda_compile.dir/Cuda/cuda_compile_generated_estimate.cu.o
/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(35): error: identifier "__builtin_aarch64_simd_qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(37): error: identifier "__builtin_aarch64_simd_hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(39): error: identifier "__builtin_aarch64_simd_si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(43): error: identifier "__builtin_aarch64_simd_sf" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(45): error: identifier "__builtin_aarch64_simd_poly8" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(47): error: identifier "__builtin_aarch64_simd_poly16" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(49): error: identifier "__builtin_aarch64_simd_uqi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(51): error: identifier "__builtin_aarch64_simd_uhi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(53): error: identifier "__builtin_aarch64_simd_usi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(56): error: identifier "__builtin_aarch64_simd_qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(58): error: identifier "__builtin_aarch64_simd_hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(60): error: identifier "__builtin_aarch64_simd_si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(62): error: identifier "__builtin_aarch64_simd_di" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(64): error: identifier "__builtin_aarch64_simd_sf" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(66): error: identifier "__builtin_aarch64_simd_df" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(68): error: identifier "__builtin_aarch64_simd_poly8" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(70): error: identifier "__builtin_aarch64_simd_poly16" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(72): error: identifier "__builtin_aarch64_simd_poly64" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(74): error: identifier "__builtin_aarch64_simd_uqi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(76): error: identifier "__builtin_aarch64_simd_uhi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(78): error: identifier "__builtin_aarch64_simd_usi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(80): error: identifier "__builtin_aarch64_simd_udi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(85): error: identifier "__builtin_aarch64_simd_poly8" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(86): error: identifier "__builtin_aarch64_simd_poly16" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(87): error: identifier "__builtin_aarch64_simd_poly64" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(88): error: identifier "__builtin_aarch64_simd_poly128" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(734): error: identifier "__builtin_aarch64_saddlv8qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(740): error: identifier "__builtin_aarch64_saddlv4hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(746): error: identifier "__builtin_aarch64_saddlv2si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(752): error: identifier "__builtin_aarch64_uaddlv8qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(759): error: identifier "__builtin_aarch64_uaddlv4hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(766): error: identifier "__builtin_aarch64_uaddlv2si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(773): error: identifier "__builtin_aarch64_saddl2v16qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(779): error: identifier "__builtin_aarch64_saddl2v8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(785): error: identifier "__builtin_aarch64_saddl2v4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(791): error: identifier "__builtin_aarch64_uaddl2v16qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(798): error: identifier "__builtin_aarch64_uaddl2v8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(805): error: identifier "__builtin_aarch64_uaddl2v4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(812): error: identifier "__builtin_aarch64_saddwv8qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(818): error: identifier "__builtin_aarch64_saddwv4hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(824): error: identifier "__builtin_aarch64_saddwv2si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(830): error: identifier "__builtin_aarch64_uaddwv8qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(837): error: identifier "__builtin_aarch64_uaddwv4hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(844): error: identifier "__builtin_aarch64_uaddwv2si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(851): error: identifier "__builtin_aarch64_saddw2v16qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(857): error: identifier "__builtin_aarch64_saddw2v8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(863): error: identifier "__builtin_aarch64_saddw2v4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(869): error: identifier "__builtin_aarch64_uaddw2v16qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(876): error: identifier "__builtin_aarch64_uaddw2v8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(883): error: identifier "__builtin_aarch64_uaddw2v4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(890): error: identifier "__builtin_aarch64_shaddv8qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(896): error: identifier "__builtin_aarch64_shaddv4hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(902): error: identifier "__builtin_aarch64_shaddv2si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(908): error: identifier "__builtin_aarch64_uhaddv8qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(915): error: identifier "__builtin_aarch64_uhaddv4hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(922): error: identifier "__builtin_aarch64_uhaddv2si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(929): error: identifier "__builtin_aarch64_shaddv16qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(935): error: identifier "__builtin_aarch64_shaddv8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(941): error: identifier "__builtin_aarch64_shaddv4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(947): error: identifier "__builtin_aarch64_uhaddv16qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(954): error: identifier "__builtin_aarch64_uhaddv8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(961): error: identifier "__builtin_aarch64_uhaddv4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(968): error: identifier "__builtin_aarch64_srhaddv8qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(974): error: identifier "__builtin_aarch64_srhaddv4hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(980): error: identifier "__builtin_aarch64_srhaddv2si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(986): error: identifier "__builtin_aarch64_urhaddv8qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(993): error: identifier "__builtin_aarch64_urhaddv4hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1000): error: identifier "__builtin_aarch64_urhaddv2si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1007): error: identifier "__builtin_aarch64_srhaddv16qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1013): error: identifier "__builtin_aarch64_srhaddv8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1019): error: identifier "__builtin_aarch64_srhaddv4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1025): error: identifier "__builtin_aarch64_urhaddv16qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1032): error: identifier "__builtin_aarch64_urhaddv8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1039): error: identifier "__builtin_aarch64_urhaddv4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1046): error: identifier "__builtin_aarch64_addhnv8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1052): error: identifier "__builtin_aarch64_addhnv4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1058): error: identifier "__builtin_aarch64_addhnv2di" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1064): error: identifier "__builtin_aarch64_addhnv8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1071): error: identifier "__builtin_aarch64_addhnv4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1078): error: identifier "__builtin_aarch64_addhnv2di" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1085): error: identifier "__builtin_aarch64_raddhnv8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1091): error: identifier "__builtin_aarch64_raddhnv4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1097): error: identifier "__builtin_aarch64_raddhnv2di" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1103): error: identifier "__builtin_aarch64_raddhnv8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1110): error: identifier "__builtin_aarch64_raddhnv4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1117): error: identifier "__builtin_aarch64_raddhnv2di" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1124): error: identifier "__builtin_aarch64_addhn2v8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1130): error: identifier "__builtin_aarch64_addhn2v4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1136): error: identifier "__builtin_aarch64_addhn2v2di" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1142): error: identifier "__builtin_aarch64_addhn2v8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1150): error: identifier "__builtin_aarch64_addhn2v4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1158): error: identifier "__builtin_aarch64_addhn2v2di" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1166): error: identifier "__builtin_aarch64_raddhn2v8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1172): error: identifier "__builtin_aarch64_raddhn2v4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1178): error: identifier "__builtin_aarch64_raddhn2v2di" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1184): error: identifier "__builtin_aarch64_raddhn2v8hi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1192): error: identifier "__builtin_aarch64_raddhn2v4si" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1200): error: identifier "__builtin_aarch64_raddhn2v2di" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1274): error: identifier "__builtin_aarch64_pmulv8qi" is undefined

/usr/lib/gcc/aarch64-linux-gnu/4.9/include/arm_neon.h(1329): error: identifier "__builtin_aarch64_pmulv16qi" is undefined

Error limit reached.
100 errors detected in the compilation of "/tmp/tmpxft_00000a8e_00000000-7_estimate.cpp1.ii".
Compilation terminated.

As discussed in forums, I tried adding -mfpu=neon -mfloat-abi=softfp in CUDA_NVCC_FLAGS, error is then: nvcc fatal : redefinition of argument ‘machine’.

I have also tried gcc 5.x instead of 4.9 but it didn’t solve the problem.

Any suggestions please, how can I fix arm_neon.h compilation errors?

I can’t answer this…perhaps a useful observation though. All arm64 have the neon instructions in 32-bit compatibility mode. Compilers with options to use neon may not apply…I’d just remove the neon option and see if it works (under ARMv8-A neon will be available in ARMv8 mode whether you specify it or not…I am not positive but I think neon options don’t exist because this is not an option…neon is required under this architecture…whether or not neon is used in arm64 most likely only depends on the code itself).

I do not know about the softfp argument, all of the Linux environment in L4T has been armhf since around L4T 16.

You are right @linuxdev, it was due to 32-bit neon instructions on arm64. I was using Eigen 3.2 in my project that has a bug, with its usage of ARM NEON in arm64. Updating Eigen to 3.3 solved my problem.

1 Like