Commit 0e73100c by Richard Kenner

(sqrtsf2, sinsf2, sindf2, sinxf2): Define.

(cossf2, cosdf2, cosxf2): Likewise.
(sqrtxf2): Operand 1 now XFmode.

From-SVN: r8685
parent 54dad0c2
...@@ -64,6 +64,12 @@ ...@@ -64,6 +64,12 @@
;;- "%$" single-precision fp specifier ("s" or "") f%$add.x fp0,fp1 ;;- "%$" single-precision fp specifier ("s" or "") f%$add.x fp0,fp1
;;- "%&" double-precision fp specifier ("d" or "") f%&add.x fp0,fp1 ;;- "%&" double-precision fp specifier ("d" or "") f%&add.x fp0,fp1
;; UNSPEC usage:
;; 1 This is a `sin' operation. The mode of the UNSPEC is MODE_FLOAT.
;; operand 1 is the argument for `sin'.
;; 2 This is a `cos' operation. The mode of the UNSPEC is MODE_FLOAT.
;; operand 1 is the argument for `cos'.
;;- Information about 68040 port. ;;- Information about 68040 port.
;;- The 68040 executes all 68030 and 68881/2 instructions, but some must ;;- The 68040 executes all 68030 and 68881/2 instructions, but some must
...@@ -3465,6 +3471,18 @@ ...@@ -3465,6 +3471,18 @@
;; Sqrt instruction for the 68881 ;; Sqrt instruction for the 68881
(define_insn "sqrtsf2"
[(set (match_operand:SF 0 "general_operand" "=f")
(sqrt:SF (match_operand:SF 1 "general_operand" "fm")))]
"TARGET_68881"
"*
{
if (FP_REG_P (operands[1]))
return \"fsqrt%.x %1,%0\";
else
return \"fsqrt%.s %1,%0\";
}")
(define_insn "sqrtdf2" (define_insn "sqrtdf2"
[(set (match_operand:DF 0 "general_operand" "=f") [(set (match_operand:DF 0 "general_operand" "=f")
(sqrt:DF (match_operand:DF 1 "general_operand" "fm")))] (sqrt:DF (match_operand:DF 1 "general_operand" "fm")))]
...@@ -5930,9 +5948,75 @@ ...@@ -5930,9 +5948,75 @@
(define_insn "sqrtxf2" (define_insn "sqrtxf2"
[(set (match_operand:XF 0 "general_operand" "=f") [(set (match_operand:XF 0 "general_operand" "=f")
(sqrt:XF (match_operand:DF 1 "nonimmediate_operand" "fm")))] (sqrt:XF (match_operand:XF 1 "nonimmediate_operand" "fm")))]
"TARGET_68881" "TARGET_68881"
"* "*
{ {
return \"fsqrt%.x %1,%0\"; return \"fsqrt%.x %1,%0\";
}") }")
(define_insn "sinsf2"
[(set (match_operand:SF 0 "general_operand" "=f")
(unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 1))]
"TARGET_68881 && flag_fast_math"
"*
{
if (FP_REG_P (operands[1]))
return \"fsin%.x %1,%0\";
else
return \"fsin%.s %1,%0\";
}")
(define_insn "sindf2"
[(set (match_operand:DF 0 "general_operand" "=f")
(unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 1))]
"TARGET_68881 && flag_fast_math"
"*
{
if (FP_REG_P (operands[1]))
return \"fsin%.x %1,%0\";
else
return \"fsin%.d %1,%0\";
}")
(define_insn "sinxf2"
[(set (match_operand:XF 0 "general_operand" "=f")
(unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 1))]
"TARGET_68881 && flag_fast_math"
"*
{
return \"fsin%.x %1,%0\";
}")
(define_insn "cossf2"
[(set (match_operand:SF 0 "general_operand" "=f")
(unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 2))]
"TARGET_68881 && flag_fast_math"
"*
{
if (FP_REG_P (operands[1]))
return \"fcos%.x %1,%0\";
else
return \"fcos%.s %1,%0\";
}")
(define_insn "cosdf2"
[(set (match_operand:DF 0 "general_operand" "=f")
(unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 2))]
"TARGET_68881 && flag_fast_math"
"*
{
if (FP_REG_P (operands[1]))
return \"fcos%.x %1,%0\";
else
return \"fcos%.d %1,%0\";
}")
(define_insn "cosxf2"
[(set (match_operand:XF 0 "general_operand" "=f")
(unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 2))]
"TARGET_68881 && flag_fast_math"
"*
{
return \"fcos%.x %1,%0\";
}")
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