diff options
author | Stan Cox <coxs@gnu.org> | 1997-05-29 19:41:36 +0000 |
---|---|---|
committer | Stan Cox <coxs@gnu.org> | 1997-05-29 19:41:36 +0000 |
commit | f3e10ef29e6b2b6e6d1918ce10426dcf73285825 (patch) | |
tree | 2fc56cab82620cc144d3dc6b36e630b8e09f52c6 | |
parent | b078c5c69ca6f58eb0367c0569e426b69b03c1af (diff) | |
download | gcc-f3e10ef29e6b2b6e6d1918ce10426dcf73285825.zip gcc-f3e10ef29e6b2b6e6d1918ce10426dcf73285825.tar.gz gcc-f3e10ef29e6b2b6e6d1918ce10426dcf73285825.tar.bz2 |
(movsfcc_1, movdfcc_1, movxfcc_1): Use singlemove_string
From-SVN: r14138
-rw-r--r-- | gcc/config/i386/i386.md | 58 |
1 files changed, 45 insertions, 13 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index b5ef6a7..e3deee5 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -7365,8 +7365,8 @@ byte_xor_operation: [(match_dup 4) (set (match_operand 0 "register_operand" "t") (if_then_else:DF (match_operand 1 "comparison_operator" "") - (match_operand:DF 2 "register_operand" "f") - (match_operand:DF 3 "register_operand" "f")))] + (match_operand:DF 2 "general_operand" "") + (match_operand:DF 3 "general_operand" "")))] "TARGET_CMOVE" " { @@ -7377,8 +7377,8 @@ byte_xor_operation: [(match_dup 4) (set (match_operand 0 "register_operand" "t") (if_then_else:XF (match_operand 1 "comparison_operator" "") - (match_operand:XF 2 "register_operand" "f") - (match_operand:XF 3 "register_operand" "f")))] + (match_operand:XF 2 "general_operand" "") + (match_operand:XF 3 "general_operand" "")))] "TARGET_CMOVE" " { @@ -7423,16 +7423,16 @@ byte_xor_operation: { xops[0] = operands[0]; xops[1] = operands[2]; - output_move_const_single (xops); + output_asm_insn (singlemove_string (xops), xops); } output_asm_insn (\"j%C1 %l4\", operands); if (STACK_REG_P (operands[3]) || GET_CODE (operands[0]) == MEM) output_asm_insn (AS1 (fld%z3,%y3), operands); else { + xops[0] = operands[0]; xops[1] = operands[3]; - SET_SRC (PATTERN (insn)) = XEXP (SET_SRC (PATTERN (insn)), 2); - output_move_const_single (xops); + output_asm_insn (singlemove_string (xops), xops); } ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[4])); } @@ -7477,16 +7477,16 @@ byte_xor_operation: { xops[0] = operands[0]; xops[1] = operands[2]; - output_move_const_single (xops); + output_asm_insn (singlemove_string (xops), xops); } output_asm_insn (\"j%C1 %l4\", operands); if (STACK_REG_P (operands[3]) || GET_CODE (operands[0]) == MEM) output_asm_insn (AS1 (fld%z3,%y3), operands); else { + xops[0] = operands[0]; xops[1] = operands[3]; - SET_SRC (PATTERN (insn)) = XEXP (SET_SRC (PATTERN (insn)), 2); - output_move_const_single (xops); + output_asm_insn (singlemove_string (xops), xops); } ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[4])); } @@ -7494,11 +7494,11 @@ byte_xor_operation: }") (define_insn "movxfcc_1" - [(set (match_operand:XF 0 "register_operand" "=t,t") + [(set (match_operand:XF 0 "register_operand" "=t,=t,f,fFm") (if_then_else:XF (match_operator 1 "comparison_operator" [(cc0) (const_int 0)]) - (match_operand:XF 2 "register_operand" "0,f") - (match_operand:XF 3 "register_operand" "f,0")))] + (match_operand:XF 2 "register_operand" "0,f,f,fFm") + (match_operand:XF 3 "register_operand" "f,0,f,fFm")))] "TARGET_CMOVE" "* { @@ -7512,6 +7512,38 @@ byte_xor_operation: /* r <- cond ? r : arg */ output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); } + else if (which_alternative == 2) + { + /* r <- cond ? r : arg */ + output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); + output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); + } + else if (which_alternative == 3) + { + rtx xops[2]; + + /* r <- cond ? arg1 : arg2 */ + operands[4] = gen_label_rtx (); + + if (STACK_REG_P (operands[2]) || GET_CODE (operands[2]) == MEM) + output_asm_insn (AS1 (fld%z2,%y2), operands); + else + { + xops[0] = operands[0]; + xops[1] = operands[2]; + output_asm_insn (singlemove_string (xops), xops); + } + output_asm_insn (\"j%C1 %l4\", operands); + if (STACK_REG_P (operands[3]) || GET_CODE (operands[0]) == MEM) + output_asm_insn (AS1 (fld%z3,%y3), operands); + else + { + xops[0] = operands[0]; + xops[1] = operands[3]; + output_asm_insn (singlemove_string (xops), xops); + } + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[4])); +} RET; }") |