diff options
Diffstat (limited to 'gcc/config/rs6000/altivec.md')
-rw-r--r-- | gcc/config/rs6000/altivec.md | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md index c5eb4abff7d..16b7cb82ebe 100644 --- a/gcc/config/rs6000/altivec.md +++ b/gcc/config/rs6000/altivec.md @@ -74,6 +74,9 @@ UNSPEC_VUNPACK_LO_SIGN_DIRECT UNSPEC_VUPKHPX UNSPEC_VUPKLPX + UNSPEC_DARN + UNSPEC_DARN_32 + UNSPEC_DARN_RAW UNSPEC_DST UNSPEC_DSTT UNSPEC_DSTST @@ -3587,6 +3590,37 @@ [(set_attr "length" "4") (set_attr "type" "vecsimple")]) +(define_insn "darn_32" + [(set (match_operand:SI 0 "register_operand" "") + (unspec:SI [(const_int 0)] UNSPEC_DARN_32))] + "TARGET_MODULO" + { + return "darn %0,0"; + } + [(set_attr "type" "add") + (set_attr "length" "4")]) + +(define_insn "darn_raw" + [(set (match_operand:DI 0 "register_operand" "") + (unspec:DI [(const_int 0)] UNSPEC_DARN_RAW))] + "TARGET_MODULO && TARGET_64BIT" + { + return "darn %0,2"; + } + [(set_attr "type" "add") + (set_attr "length" "4")]) + +(define_insn "darn" + [(set (match_operand:DI 0 "register_operand" "") + (unspec:DI [(const_int 0)] UNSPEC_DARN))] + "TARGET_MODULO && TARGET_64BIT" + { + return "darn %0,1"; + } + [(set_attr "type" "add") + (set_attr "length" "4")]) + + (define_expand "bcd<bcd_add_sub>_<code>" [(parallel [(set (reg:CCFP 74) (compare:CCFP |