Hi all, This patch implements target pragmas for aarch64. The pragmas accepted are the same as for target attributes (as required). In addition pragmas will need to redefine the target-specific preprocessor macros if appropriate. A new file: aarch64-c.c is added and the code from TARGET_CPU_CPP_BUILTINS is moved there and split up into the unconditional parts that are always defined and the conditional stuff that depends on certain architectural features. The pragma processing code calls that to redefine preprocessor macros on the fly. The implementation is similar to the rs6000 one. With target pragmas implemented, we can use them in the arm_neon.h and arm_acle.h headers to specify the architectural features required for those intrinsics, rather than #ifdef'ing them out when FP/SIMD is not available from the command line. We need to do this in order to handle cases where the user compiles a file with -mgeneral-regs-only but has a function tagged with +simd and tries to use the arm_neon.h intrinsics. Tests and documentation comes as a separate patch later on in the series Bootstrapped and tested on aarch64. Ok for trunk? Thanks, Kyrill 2015-07-16 Kyrylo Tkachov * config.gcc (aarch64*-*-*): Specify c_target_objs and cxx_target_objs. * config/aarch64/aarch64.h (REGISTER_TARGET_PRAGMAS): (TARGET_CPU_CPP_BUILTINS): Redefine to call aarch64_cpu_cpp_builtins. * config/aarch64/aarch64.c (aarch64_override_options_internal): Remove static keyword. (aarch64_reset_previous_fndecl): New function. * config/aarch64/aarch64-c.c: New file. * config/aarch64/arm_acle.h: Add pragma +crc+nofp at the top. Push and pop options at beginning and end. Remove ifdef __ARM_FEATURE_CRC32. * config/aarch64/arm_neon.h: Remove #ifdef check on __ARM_NEON. Add pragma arch=armv8-a+simd and +crypto where appropriate. * config/aarch64/t-aarch64 (aarch64-c.o): New rule. 2015-07-16 Kyrylo Tkachov * gcc.target/aarch64/arm_neon-nosimd-error.c: Delete.