aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1995-03-06 00:29:33 -0700
committerJeff Law <law@gcc.gnu.org>1995-03-06 00:29:33 -0700
commit014a45652d320277892a26549cbe3117c26a431f (patch)
tree15de10aaec103d3ea51334f56aebed9744ef2b13
parentcd681d1f89dcfdf9e32f21ea8d0800d8eed1a260 (diff)
downloadgcc-014a45652d320277892a26549cbe3117c26a431f.zip
gcc-014a45652d320277892a26549cbe3117c26a431f.tar.gz
gcc-014a45652d320277892a26549cbe3117c26a431f.tar.bz2
* pa.md (movsicc): New expander.
From-SVN: r9124
-rw-r--r--gcc/config/pa/pa.md23
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index b7ae3ad..b01a504 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -762,6 +762,29 @@
(set_attr "length" "8,8")])
;;; Experimental conditional move patterns
+(define_expand "movsicc"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (if_then_else:SI
+ (match_operator 1 "comparison_operator"
+ [(match_operand:SI 4 "register_operand" "")
+ (match_operand:SI 5 "arith11_operand" "")])
+ (match_operand:SI 2 "reg_or_cint_move_operand" "")
+ (match_operand:SI 3 "reg_or_cint_move_operand" "")))]
+ ""
+ "
+{
+ enum rtx_code code = GET_CODE (operands[1]);
+
+ if (hppa_branch_type != CMP_SI)
+ FAIL;
+
+ /* operands[1] is currently the result of compare_from_rtx. We want to
+ emit a compare of the original operands. */
+ operands[1] = gen_rtx (code, SImode, hppa_compare_op0, hppa_compare_op1);
+ operands[4] = hppa_compare_op0;
+ operands[5] = hppa_compare_op1;
+}")
+
; We need the first constraint alternative in order to avoid
; earlyclobbers on all other alternatives.
(define_insn ""