diff options
author | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-12-18 22:13:05 +0000 |
---|---|---|
committer | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-12-18 22:13:05 +0000 |
commit | 66a81b36b3d743cdb63285ba956aa0a617020147 (patch) | |
tree | 9b0688852e7a5fcbd5f1aefa62f1003783fe0aba /gcc/config/rs6000/spe.md | |
parent | cf3a2fe94519ce85f3c9c627850d5969b025f7a7 (diff) | |
download | gcc-66a81b36b3d743cdb63285ba956aa0a617020147.tar.gz |
* config/rs6000/rs6000.c (rs6000_generate_compare): Condition
choice of e500 comparison instructions on flag_finite_math_only &&
!flag_trapping_math, not flag_unsafe_math_optimizations.
* config/rs6000/rs6000.md (abstf2): Condition choice of e500
instructions on flag_finite_math_only && !flag_trapping_math, not
flag_unsafe_math_optimizations.
(bltgt, sltgt): Disable for TARGET_HARD_FLOAT && !TARGET_FPRS.
* config/rs6000/spe.md (cmpsfeq_gpr, tstsfeq_gpr, cmpsfgt_gpr,
tstsfgt_gpr, cmpsflt_gpr, tstsflt_gpr, cmpdfeq_gpr, tstdfeq_gpr,
cmpdfgt_gpr, tstdfgt_gpr, cmpdflt_gpr, tstdflt_gpr, cmptfeq_gpr,
tsttfeq_gpr, cmptfgt_gpr, tsttfgt_gpr, cmptflt_gpr, tsttflt_gpr):
Condition choice of comparison instructions on
flag_finite_math_only && !flag_trapping_math, not
flag_unsafe_math_optimizations.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@142822 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/rs6000/spe.md')
-rw-r--r-- | gcc/config/rs6000/spe.md | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/gcc/config/rs6000/spe.md b/gcc/config/rs6000/spe.md index 50736f1a6ba..f8118afad22 100644 --- a/gcc/config/rs6000/spe.md +++ b/gcc/config/rs6000/spe.md @@ -2933,7 +2933,8 @@ [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r") (match_operand:SF 2 "gpc_reg_operand" "r"))] 1000))] - "TARGET_HARD_FLOAT && !TARGET_FPRS && !flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && !TARGET_FPRS + && !(flag_finite_math_only && !flag_trapping_math)" "efscmpeq %0,%1,%2" [(set_attr "type" "veccmp")]) @@ -2943,7 +2944,8 @@ [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r") (match_operand:SF 2 "gpc_reg_operand" "r"))] 1001))] - "TARGET_HARD_FLOAT && !TARGET_FPRS && flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && !TARGET_FPRS + && flag_finite_math_only && !flag_trapping_math" "efststeq %0,%1,%2" [(set_attr "type" "veccmpsimple")]) @@ -2953,7 +2955,8 @@ [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r") (match_operand:SF 2 "gpc_reg_operand" "r"))] 1002))] - "TARGET_HARD_FLOAT && !TARGET_FPRS && !flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && !TARGET_FPRS + && !(flag_finite_math_only && !flag_trapping_math)" "efscmpgt %0,%1,%2" [(set_attr "type" "veccmp")]) @@ -2963,7 +2966,8 @@ [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r") (match_operand:SF 2 "gpc_reg_operand" "r"))] 1003))] - "TARGET_HARD_FLOAT && !TARGET_FPRS && flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && !TARGET_FPRS + && flag_finite_math_only && !flag_trapping_math" "efststgt %0,%1,%2" [(set_attr "type" "veccmpsimple")]) @@ -2973,7 +2977,8 @@ [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r") (match_operand:SF 2 "gpc_reg_operand" "r"))] 1004))] - "TARGET_HARD_FLOAT && !TARGET_FPRS && !flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && !TARGET_FPRS + && !(flag_finite_math_only && !flag_trapping_math)" "efscmplt %0,%1,%2" [(set_attr "type" "veccmp")]) @@ -2983,7 +2988,8 @@ [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r") (match_operand:SF 2 "gpc_reg_operand" "r"))] 1005))] - "TARGET_HARD_FLOAT && !TARGET_FPRS && flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && !TARGET_FPRS + && flag_finite_math_only && !flag_trapping_math" "efststlt %0,%1,%2" [(set_attr "type" "veccmpsimple")]) @@ -2995,7 +3001,8 @@ [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r") (match_operand:DF 2 "gpc_reg_operand" "r"))] CMPDFEQ_GPR))] - "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && !flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE + && !(flag_finite_math_only && !flag_trapping_math)" "efdcmpeq %0,%1,%2" [(set_attr "type" "veccmp")]) @@ -3005,7 +3012,8 @@ [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r") (match_operand:DF 2 "gpc_reg_operand" "r"))] TSTDFEQ_GPR))] - "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE + && flag_finite_math_only && !flag_trapping_math" "efdtsteq %0,%1,%2" [(set_attr "type" "veccmpsimple")]) @@ -3015,7 +3023,8 @@ [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r") (match_operand:DF 2 "gpc_reg_operand" "r"))] CMPDFGT_GPR))] - "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && !flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE + && !(flag_finite_math_only && !flag_trapping_math)" "efdcmpgt %0,%1,%2" [(set_attr "type" "veccmp")]) @@ -3025,7 +3034,8 @@ [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r") (match_operand:DF 2 "gpc_reg_operand" "r"))] TSTDFGT_GPR))] - "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE + && flag_finite_math_only && !flag_trapping_math" "efdtstgt %0,%1,%2" [(set_attr "type" "veccmpsimple")]) @@ -3035,7 +3045,8 @@ [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r") (match_operand:DF 2 "gpc_reg_operand" "r"))] CMPDFLT_GPR))] - "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && !flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE + && !(flag_finite_math_only && !flag_trapping_math)" "efdcmplt %0,%1,%2" [(set_attr "type" "veccmp")]) @@ -3045,7 +3056,8 @@ [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r") (match_operand:DF 2 "gpc_reg_operand" "r"))] TSTDFLT_GPR))] - "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && flag_unsafe_math_optimizations" + "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE + && flag_finite_math_only && !flag_trapping_math" "efdtstlt %0,%1,%2" [(set_attr "type" "veccmpsimple")]) @@ -3059,7 +3071,7 @@ CMPTFEQ_GPR))] "!TARGET_IEEEQUAD && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128 - && !flag_unsafe_math_optimizations" + && !(flag_finite_math_only && !flag_trapping_math)" "efdcmpeq %0,%1,%2\;bng %0,$+8\;efdcmpeq %0,%L1,%L2" [(set_attr "type" "veccmp") (set_attr "length" "12")]) @@ -3072,7 +3084,7 @@ TSTTFEQ_GPR))] "!TARGET_IEEEQUAD && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128 - && flag_unsafe_math_optimizations" + && flag_finite_math_only && !flag_trapping_math" "efdtsteq %0,%1,%2\;bng %0,$+8\;efdtsteq %0,%L1,%L2" [(set_attr "type" "veccmpsimple") (set_attr "length" "12")]) @@ -3085,7 +3097,7 @@ CMPTFGT_GPR))] "!TARGET_IEEEQUAD && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128 - && !flag_unsafe_math_optimizations" + && !(flag_finite_math_only && !flag_trapping_math)" "efdcmpgt %0,%1,%2\;bgt %0,$+16\;efdcmpeq %0,%1,%2\;bng %0,$+8\;efdcmpgt %0,%L1,%L2" [(set_attr "type" "veccmp") (set_attr "length" "20")]) @@ -3098,7 +3110,7 @@ TSTTFGT_GPR))] "!TARGET_IEEEQUAD && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128 - && flag_unsafe_math_optimizations" + && flag_finite_math_only && !flag_trapping_math" "efdtstgt %0,%1,%2\;bgt %0,$+16\;efdtsteq %0,%1,%2\;bng %0,$+8\;efdtstgt %0,%L1,%L2" [(set_attr "type" "veccmpsimple") (set_attr "length" "20")]) @@ -3111,7 +3123,7 @@ CMPTFLT_GPR))] "!TARGET_IEEEQUAD && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128 - && !flag_unsafe_math_optimizations" + && !(flag_finite_math_only && !flag_trapping_math)" "efdcmplt %0,%1,%2\;bgt %0,$+16\;efdcmpeq %0,%1,%2\;bng %0,$+8\;efdcmplt %0,%L1,%L2" [(set_attr "type" "veccmp") (set_attr "length" "20")]) @@ -3124,7 +3136,7 @@ TSTTFLT_GPR))] "!TARGET_IEEEQUAD && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128 - && flag_unsafe_math_optimizations" + && flag_finite_math_only && !flag_trapping_math" "efdtstlt %0,%1,%2\;bgt %0,$+16\;efdtsteq %0,%1,%2\;bng %0,$+8\;efdtstlt %0,%L1,%L2" [(set_attr "type" "veccmpsimple") (set_attr "length" "20")]) |