diff options
Diffstat (limited to 'gcc/config/rs6000')
-rw-r--r-- | gcc/config/rs6000/rs6000-builtin.def | 2 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 20 |
2 files changed, 22 insertions, 0 deletions
diff --git a/gcc/config/rs6000/rs6000-builtin.def b/gcc/config/rs6000/rs6000-builtin.def index 9d80d03fe50..c05d9f53d54 100644 --- a/gcc/config/rs6000/rs6000-builtin.def +++ b/gcc/config/rs6000/rs6000-builtin.def @@ -2575,6 +2575,8 @@ BU_P9_OVERLOAD_2 (CMPEQB, "byte_in_set") /* Future architecture scalar built-ins. */ BU_FUTURE_MISC_2 (CFUGED, "cfuged", CONST, cfuged) +BU_FUTURE_MISC_2 (CNTLZDM, "cntlzdm", CONST, cntlzdm) +BU_FUTURE_MISC_2 (CNTTZDM, "cnttzdm", CONST, cnttzdm) /* Future architecture vector built-ins. */ BU_FUTURE_V_2 (VCFUGED, "vcfuged", CONST, vcfuged) diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 1ceb393efde..6c9bae934d1 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -149,6 +149,8 @@ UNSPEC_PLTSEQ UNSPEC_PLT16_HA UNSPEC_CFUGED + UNSPEC_CNTLZDM + UNSPEC_CNTTZDM ]) ;; @@ -2463,6 +2465,24 @@ "cfuged %0,%1,%2" [(set_attr "type" "integer")]) +(define_insn "cntlzdm" + [(set (match_operand:DI 0 "gpc_reg_operand" "=r") + (unspec:DI [(match_operand:DI 1 "gpc_reg_operand" "r") + (match_operand:DI 2 "gpc_reg_operand" "r")] + UNSPEC_CNTLZDM))] + "TARGET_FUTURE && TARGET_POWERPC64" + "cntlzdm %0,%1,%2" + [(set_attr "type" "integer")]) + +(define_insn "cnttzdm" + [(set (match_operand:DI 0 "gpc_reg_operand" "=r") + (unspec:DI [(match_operand:DI 1 "gpc_reg_operand" "r") + (match_operand:DI 2 "gpc_reg_operand" "r")] + UNSPEC_CNTTZDM))] + "TARGET_FUTURE && TARGET_POWERPC64" + "cnttzdm %0,%1,%2" + [(set_attr "type" "integer")]) + (define_insn "cmpb<mode>3" [(set (match_operand:GPR 0 "gpc_reg_operand" "=r") (unspec:GPR [(match_operand:GPR 1 "gpc_reg_operand" "r") |