The ARMv8.2-A FP16 extension adds a number of instructions to support data movement for FP16 values. This patch adds these instructions to the backend, making them available to the compiler code generator. The new instructions include VSEL which selects between two registers depending on a condition. This is used to support conditional data movement which can depend on the result of comparisons between half-precision values. These comparisons are always done by conversion to single-precision. Tested the series for arm-none-linux-gnueabihf with native bootstrap and make check and for arm-none-eabi and armeb-none-eabi with make check on an ARMv8.2-A emulator. This patch also tested for arm-none-linux-gnueabihf with native bootstrap and make check and for arm-none-eabi with check-gcc on an ARMv8.2-A emulator. Ok for trunk? Matthew 2016-05-17 Matthew Wahab Jiong Wang * config/arm/arm.c (coproc_secondary_reload_class): Make HFmode available when FP16 instructions are available. (output_mov_vfp): Add support for 16-bit data moves. (arm_validize_comparison): Fix some white-space. Support HFmode by conversion to SFmode. * config/arm/arm.md (truncdfhf2): Fix a comment. (extendhfdf2): Likewise. (cstorehf4): New. (movsicc): Fix some white-space. (movhfcc): New. (movsfcc): Fix some white-space. (*cmovhf): New. * config/arm/vfp.md (*arm_movhi_vfp): Disable when VFP FP16 instructions are available. (*thumb_movhi_vfp): Likewise. (*arm_movhi_fp16): New. (*thumb_movhi_fp16): New. (*movhf_vfp_fp16): New. (*movhf_vfp_neon): Disable when VFP FP16 instructions are available. (*movhf_vfp): Likewise. (extendhfsf2): Enable when VFP FP16 instructions are available. (truncsfhf2): Enable when VFP FP16 instructions are available. testsuite/ 2016-05-17 Matthew Wahab * gcc.target/arm/armv8_2_fp16-move-1.c: New.