Commit 9a594ad6 by Jiong Wang Committed by Jiong Wang

[AArch64][9/10] ARMv8.2-A FP16 three operands scalar intrinsics

gcc/
	* config/aarch64/aarch64-simd-builtins.def: Register new builtins.
	* config/aarch64/aarch64.md (fma, fnma): Support HF.
	* config/aarch64/arm_fp16.h (vfmah_f16, vfmsh_f16): New.

From-SVN: r238724
parent 68ad28c3
2016-07-25 Jiong Wang <jiong.wang@arm.com> 2016-07-25 Jiong Wang <jiong.wang@arm.com>
* config/aarch64/aarch64-simd-builtins.def: Register new builtins. * config/aarch64/aarch64-simd-builtins.def: Register new builtins.
* config/aarch64/aarch64.md (fma, fnma): Support HF.
* config/aarch64/arm_fp16.h (vfmah_f16, vfmsh_f16): New.
2016-07-25 Jiong Wang <jiong.wang@arm.com>
* config/aarch64/aarch64-simd-builtins.def: Register new builtins.
* config/aarch64/aarch64.md (<FCVT_F2FIXED:fcvt_fixed_insn>hf<mode>3): * config/aarch64/aarch64.md (<FCVT_F2FIXED:fcvt_fixed_insn>hf<mode>3):
New. New.
(<FCVT_FIXED2F:fcvt_fixed_insn><mode>hf3): Likewise. (<FCVT_FIXED2F:fcvt_fixed_insn><mode>hf3): Likewise.
......
...@@ -422,8 +422,10 @@ ...@@ -422,8 +422,10 @@
/* Implemented by fma<mode>4. */ /* Implemented by fma<mode>4. */
BUILTIN_VHSDF (TERNOP, fma, 4) BUILTIN_VHSDF (TERNOP, fma, 4)
VAR1 (TERNOP, fma, 4, hf)
/* Implemented by fnma<mode>4. */ /* Implemented by fnma<mode>4. */
BUILTIN_VHSDF (TERNOP, fnma, 4) BUILTIN_VHSDF (TERNOP, fnma, 4)
VAR1 (TERNOP, fnma, 4, hf)
/* Implemented by aarch64_simd_bsl<mode>. */ /* Implemented by aarch64_simd_bsl<mode>. */
BUILTIN_VDQQH (BSL_P, simd_bsl, 0) BUILTIN_VDQQH (BSL_P, simd_bsl, 0)
......
...@@ -4492,23 +4492,24 @@ ...@@ -4492,23 +4492,24 @@
;; fma - no throw ;; fma - no throw
(define_insn "fma<mode>4" (define_insn "fma<mode>4"
[(set (match_operand:GPF 0 "register_operand" "=w") [(set (match_operand:GPF_F16 0 "register_operand" "=w")
(fma:GPF (match_operand:GPF 1 "register_operand" "w") (fma:GPF_F16 (match_operand:GPF_F16 1 "register_operand" "w")
(match_operand:GPF 2 "register_operand" "w") (match_operand:GPF_F16 2 "register_operand" "w")
(match_operand:GPF 3 "register_operand" "w")))] (match_operand:GPF_F16 3 "register_operand" "w")))]
"TARGET_FLOAT" "TARGET_FLOAT"
"fmadd\\t%<s>0, %<s>1, %<s>2, %<s>3" "fmadd\\t%<s>0, %<s>1, %<s>2, %<s>3"
[(set_attr "type" "fmac<s>")] [(set_attr "type" "fmac<stype>")]
) )
(define_insn "fnma<mode>4" (define_insn "fnma<mode>4"
[(set (match_operand:GPF 0 "register_operand" "=w") [(set (match_operand:GPF_F16 0 "register_operand" "=w")
(fma:GPF (neg:GPF (match_operand:GPF 1 "register_operand" "w")) (fma:GPF_F16
(match_operand:GPF 2 "register_operand" "w") (neg:GPF_F16 (match_operand:GPF_F16 1 "register_operand" "w"))
(match_operand:GPF 3 "register_operand" "w")))] (match_operand:GPF_F16 2 "register_operand" "w")
(match_operand:GPF_F16 3 "register_operand" "w")))]
"TARGET_FLOAT" "TARGET_FLOAT"
"fmsub\\t%<s>0, %<s>1, %<s>2, %<s>3" "fmsub\\t%<s>0, %<s>1, %<s>2, %<s>3"
[(set_attr "type" "fmac<s>")] [(set_attr "type" "fmac<stype>")]
) )
(define_insn "fms<mode>4" (define_insn "fms<mode>4"
......
...@@ -560,6 +560,20 @@ vsubh_f16 (float16_t __a, float16_t __b) ...@@ -560,6 +560,20 @@ vsubh_f16 (float16_t __a, float16_t __b)
return __a - __b; return __a - __b;
} }
/* ARMv8.2-A FP16 three operands scalar intrinsics. */
__extension__ static __inline float16_t __attribute__ ((__always_inline__))
vfmah_f16 (float16_t __a, float16_t __b, float16_t __c)
{
return __builtin_aarch64_fmahf (__b, __c, __a);
}
__extension__ static __inline float16_t __attribute__ ((__always_inline__))
vfmsh_f16 (float16_t __a, float16_t __b, float16_t __c)
{
return __builtin_aarch64_fnmahf (__b, __c, __a);
}
#pragma GCC pop_options #pragma GCC pop_options
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment