Commit 959e0a76 by Michael Hayes Committed by Michael Hayes

c4x.md: Fix minor formatting problems.

	* config/c4x/c4x.md: Fix minor formatting problems.  Update docs.
	(*b, *b_rev, *b_noov, *b_noov_rev, *db,
	decrement_and_branch_until_zero, rptb_end): Use c4x_output_cbranch
	to output the instruction sequences.
	(rpts): Delete.
	(rptb_top): Provide alternatives to use any register or memory
	for loop counter.
	(rptb_end):  Emit use of operands rather than assigning them
	explicitly to the RS and RE registers.

From-SVN: r23880
parent 4271f003
Thu Nov 26 17:15:38 1998 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* config/c4x/c4x.md: Fix minor formatting problems. Update docs.
(*b, *b_rev, *b_noov, *b_noov_rev, *db,
decrement_and_branch_until_zero, rptb_end): Use c4x_output_cbranch
to output the instruction sequences.
(rpts): Delete.
(rptb_top): Provide alternatives to use any register or memory
for loop counter.
(rptb_end): Emit use of operands rather than assigning them
explicitly to the RS and RE registers.
Thu Nov 26 16:37:59 1998 Michael Hayes <m.hayes@elec.canterbury.ac.nz> Thu Nov 26 16:37:59 1998 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* config/c4x/c4x.c (c4x_modified_between_p, c4x_mem_set_p, * config/c4x/c4x.c (c4x_modified_between_p, c4x_mem_set_p,
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
; ;
; TODO : ; TODO :
; Set up addressing macros to handle direct memory references properly ; Set up addressing macros to handle direct memory references properly.
; Try using PQImode again for addresses since C30 only uses ; Try using PQImode again for addresses since C30 only uses
; 24-bit addresses. Ideally GCC would emit different insns ; 24-bit addresses. Ideally GCC would emit different insns
; for QImode and Pmode, whether Pmode was QImode or PQImode. ; for QImode and Pmode, whether Pmode was QImode or PQImode.
...@@ -90,16 +90,25 @@ ...@@ -90,16 +90,25 @@
; b stack pointer SP ; b stack pointer SP
; c other int reg AR0-AR7, IR0-IR1, RC, RS, RE ; c other int reg AR0-AR7, IR0-IR1, RC, RS, RE
; d fp reg R0-R11 (sets CC when dst) ; d fp reg R0-R11 (sets CC when dst)
; e
; f fp reg R0-R11 (sets CC when dst) ; f fp reg R0-R11 (sets CC when dst)
; g general reg, memory, constant ; g general reg, memory, constant
; h fp reg R0-R11 (sets CC when dst) ; h fp reg (HFmode) R0-R11 (sets CC when dst)
; i immediate int constant ; i immediate int constant
; j
; k block count BK
; l
; m memory ; m memory
; n immediate int constant with known numeric value
; o offsettable memory
; p memory address
; q low fp reg R0-R7 (sets CC when dst) ; q low fp reg R0-R7 (sets CC when dst)
; r general reg R0-R11, AR0-AR7, IR0-IR1, RC, RS, RE ; r general reg R0-R11, AR0-AR7, IR0-IR1, RC, RS, RE
; s immediate int (value not explicit) ; s immediate int constant (value not explicit)
; t R0-R1 ; t R0-R1
; u R2-R3 ; u R2-R3
; v repeat count reg RC
; w
; x index reg IR0-IR1 ; x index reg IR0-IR1
; y status (CC) reg ST ; y status (CC) reg ST
; z data pointer DP ; z data pointer DP
...@@ -117,6 +126,8 @@ ...@@ -117,6 +126,8 @@
; R ARx + 5-bit unsigned disp (C4x only) ; R ARx + 5-bit unsigned disp (C4x only)
; S ARx + 0, 1, IRx disp ; S ARx + 0, 1, IRx disp
; T symbol ref (direct) ; T symbol ref (direct)
; V non offsettable memory
; X any operand
; < memory operand with autodecrement addressing ; < memory operand with autodecrement addressing
; > memory operand with autoincrement addressing ; > memory operand with autoincrement addressing
; { memory operand with pre-modify addressing ; { memory operand with pre-modify addressing
...@@ -1063,6 +1074,14 @@ ...@@ -1063,6 +1074,14 @@
(const_int 1) (const_int 0))] (const_int 1) (const_int 0))]
(const_int 0))) (const_int 0)))
;
; C4x INSN PATTERNS:
;
; Note that the movMM and addP patterns can be called during reload
; so we need to take special care with theses patterns since
; we cannot blindly clobber CC or generate new pseudo registers.
; ;
; TWO OPERAND INTEGER INSTRUCTIONS ; TWO OPERAND INTEGER INSTRUCTIONS
; ;
...@@ -1110,6 +1129,7 @@ ...@@ -1110,6 +1129,7 @@
; ;
; LDIU/LDA/STI/STIK ; LDIU/LDA/STI/STIK
;
; The following moves will not set the condition codes register. ; The following moves will not set the condition codes register.
; ;
...@@ -1596,7 +1616,8 @@ ...@@ -1596,7 +1616,8 @@
; Default to int16 data attr. ; Default to int16 data attr.
; This pattern is required primarily for manipulating the stack pointer ; This pattern is required primarily for manipulating the stack pointer
; where GCC doesn't expect CC to be clobbered. ; where GCC doesn't expect CC to be clobbered or for calculating
; addresses during reload.
(define_insn "addqi3_noclobber" (define_insn "addqi3_noclobber"
[(set (match_operand:QI 0 "std_reg_operand" "=c,?c,c") [(set (match_operand:QI 0 "std_reg_operand" "=c,?c,c")
(plus:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0") (plus:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
...@@ -1765,13 +1786,13 @@ ...@@ -1765,13 +1786,13 @@
if (operands[1] == operands[2]) if (operands[1] == operands[2])
{ {
/* Do the squaring operation in-line. */ /* Do the squaring operation in-line. */
emit_insn (gen_sqrqi2_inline(operands[0], operands[1])); emit_insn (gen_sqrqi2_inline (operands[0], operands[1]));
DONE; DONE;
} }
if (TARGET_INLINE) if (TARGET_INLINE)
{ {
emit_insn (gen_mulqi3_inline(operands[0], operands[1], emit_insn (gen_mulqi3_inline (operands[0], operands[1],
operands[2])); operands[2]));
DONE; DONE;
} }
c4x_emit_libcall3 (MULQI3_LIBCALL, MULT, QImode, operands); c4x_emit_libcall3 (MULQI3_LIBCALL, MULT, QImode, operands);
...@@ -3261,7 +3282,7 @@ ...@@ -3261,7 +3282,7 @@
FAIL; FAIL;
else else
{ {
emit_insn (gen_sqrtqf2_inline( operands[0], operands[1])); emit_insn (gen_sqrtqf2_inline (operands[0], operands[1]));
DONE; DONE;
} }
") ")
...@@ -3506,7 +3527,7 @@ ...@@ -3506,7 +3527,7 @@
} }
else else
{ {
emit_insn (gen_divqf3_inline( operands[0], operands[1], operands[2])); emit_insn (gen_divqf3_inline (operands[0], operands[1], operands[2]));
DONE; DONE;
} }
") ")
...@@ -3533,10 +3554,10 @@ ...@@ -3533,10 +3554,10 @@
[(reg:CC_NOOV 21) (const_int 0)]) [(reg:CC_NOOV 21) (const_int 0)])
(match_operand:QI 2 "src_operand" "g,0") (match_operand:QI 2 "src_operand" "g,0")
(match_operand:QI 3 "src_operand" "0,g")))] (match_operand:QI 3 "src_operand" "0,g")))]
"GET_CODE(operands[1]) != LE "GET_CODE (operands[1]) != LE
&& GET_CODE(operands[1]) != GE && GET_CODE (operands[1]) != GE
&& GET_CODE(operands[1]) != LT && GET_CODE (operands[1]) != LT
&& GET_CODE(operands[1]) != GT" && GET_CODE (operands[1]) != GT"
"@ "@
ldi%1\\t%2,%0 ldi%1\\t%2,%0
ldi%I1\\t%3,%0" ldi%I1\\t%3,%0"
...@@ -3581,10 +3602,10 @@ ...@@ -3581,10 +3602,10 @@
[(reg:CC_NOOV 21) (const_int 0)]) [(reg:CC_NOOV 21) (const_int 0)])
(match_operand:QF 2 "src_operand" "fmH,0") (match_operand:QF 2 "src_operand" "fmH,0")
(match_operand:QF 3 "src_operand" "0,fmH")))] (match_operand:QF 3 "src_operand" "0,fmH")))]
"GET_CODE(operands[1]) != LE "GET_CODE (operands[1]) != LE
&& GET_CODE(operands[1]) != GE && GET_CODE (operands[1]) != GE
&& GET_CODE(operands[1]) != LT && GET_CODE (operands[1]) != LT
&& GET_CODE(operands[1]) != GT" && GET_CODE (operands[1]) != GT"
"@ "@
ldf%1\\t%2,%0 ldf%1\\t%2,%0
ldf%I1\\t%3,%0" ldf%I1\\t%3,%0"
...@@ -3818,10 +3839,10 @@ ...@@ -3818,10 +3839,10 @@
(define_insn "*mulqf3_addqf3_clobber" (define_insn "*mulqf3_addqf3_clobber"
[(set (match_operand:QF 0 "r0r1_reg_operand" "=t") [(set (match_operand:QF 0 "r0r1_reg_operand" "=t")
(mult:QF (match_operand:QF 1 "parallel_operand" "S<>q") (mult:QF (match_operand:QF 1 "parallel_operand" "%S<>q")
(match_operand:QF 2 "parallel_operand" "S<>q"))) (match_operand:QF 2 "parallel_operand" "S<>q")))
(set (match_operand:QF 3 "r2r3_reg_operand" "=u") (set (match_operand:QF 3 "r2r3_reg_operand" "=u")
(plus:QF (match_operand:QF 4 "parallel_operand" "S<>q") (plus:QF (match_operand:QF 4 "parallel_operand" "%S<>q")
(match_operand:QF 5 "parallel_operand" "S<>q"))) (match_operand:QF 5 "parallel_operand" "S<>q")))
(clobber (reg:CC 21))] (clobber (reg:CC 21))]
"TARGET_PARALLEL_MPY && valid_parallel_operands_6 (operands, QFmode)" "TARGET_PARALLEL_MPY && valid_parallel_operands_6 (operands, QFmode)"
...@@ -4134,7 +4155,7 @@ ...@@ -4134,7 +4155,7 @@
(pc)))] (pc)))]
"" ""
"* "*
return c4x_output_cbranch (0, insn);" return c4x_output_cbranch (\"b%0\", insn);"
[(set_attr "type" "jmpc")]) [(set_attr "type" "jmpc")])
(define_insn "*b_rev" (define_insn "*b_rev"
...@@ -4144,7 +4165,7 @@ ...@@ -4144,7 +4165,7 @@
(label_ref (match_operand 1 "" ""))))] (label_ref (match_operand 1 "" ""))))]
"" ""
"* "*
return c4x_output_cbranch (1, insn);" return c4x_output_cbranch (\"b%I0\", insn);"
[(set_attr "type" "jmpc")]) [(set_attr "type" "jmpc")])
(define_insn "*b_noov" (define_insn "*b_noov"
...@@ -4152,12 +4173,12 @@ ...@@ -4152,12 +4173,12 @@
[(reg:CC_NOOV 21) (const_int 0)]) [(reg:CC_NOOV 21) (const_int 0)])
(label_ref (match_operand 1 "" "")) (label_ref (match_operand 1 "" ""))
(pc)))] (pc)))]
"GET_CODE(operands[0]) != LE "GET_CODE (operands[0]) != LE
&& GET_CODE(operands[0]) != GE && GET_CODE (operands[0]) != GE
&& GET_CODE(operands[0]) != LT && GET_CODE (operands[0]) != LT
&& GET_CODE(operands[0]) != GT" && GET_CODE (operands[0]) != GT"
"* "*
return c4x_output_cbranch (0, insn);" return c4x_output_cbranch (\"b%0\", insn);"
[(set_attr "type" "jmpc")]) [(set_attr "type" "jmpc")])
(define_insn "*b_noov_rev" (define_insn "*b_noov_rev"
...@@ -4165,12 +4186,12 @@ ...@@ -4165,12 +4186,12 @@
[(reg:CC_NOOV 21) (const_int 0)]) [(reg:CC_NOOV 21) (const_int 0)])
(pc) (pc)
(label_ref (match_operand 1 "" ""))))] (label_ref (match_operand 1 "" ""))))]
"GET_CODE(operands[0]) != LE "GET_CODE (operands[0]) != LE
&& GET_CODE(operands[0]) != GE && GET_CODE (operands[0]) != GE
&& GET_CODE(operands[0]) != LT && GET_CODE (operands[0]) != LT
&& GET_CODE(operands[0]) != GT" && GET_CODE (operands[0]) != GT"
"* "*
return c4x_output_cbranch (1, insn);" return c4x_output_cbranch (\"b%I0\", insn);"
[(set_attr "type" "jmpc")]) [(set_attr "type" "jmpc")])
(define_expand "beq" (define_expand "beq"
...@@ -4382,10 +4403,10 @@ ...@@ -4382,10 +4403,10 @@
[(reg:CC_NOOV 21) (const_int 0)]) [(reg:CC_NOOV 21) (const_int 0)])
(return) (return)
(pc)))] (pc)))]
"GET_CODE(operands[0]) != LE "GET_CODE (operands[0]) != LE
&& GET_CODE(operands[0]) != GE && GET_CODE (operands[0]) != GE
&& GET_CODE(operands[0]) != LT && GET_CODE (operands[0]) != LT
&& GET_CODE(operands[0]) != GT && GET_CODE (operands[0]) != GT
&& c4x_null_epilogue_p ()" && c4x_null_epilogue_p ()"
"rets%0" "rets%0"
[(set_attr "type" "rets")]) [(set_attr "type" "rets")])
...@@ -4406,10 +4427,10 @@ ...@@ -4406,10 +4427,10 @@
[(reg:CC_NOOV 21) (const_int 0)]) [(reg:CC_NOOV 21) (const_int 0)])
(pc) (pc)
(return)))] (return)))]
"GET_CODE(operands[0]) != LE "GET_CODE (operands[0]) != LE
&& GET_CODE(operands[0]) != GE && GET_CODE (operands[0]) != GE
&& GET_CODE(operands[0]) != LT && GET_CODE (operands[0]) != LT
&& GET_CODE(operands[0]) != GT && GET_CODE (operands[0]) != GT
&& c4x_null_epilogue_p ()" && c4x_null_epilogue_p ()"
"rets%I0" "rets%I0"
[(set_attr "type" "rets")]) [(set_attr "type" "rets")])
...@@ -4434,55 +4455,50 @@ ...@@ -4434,55 +4455,50 @@
; have an option to disable this instruction. ; have an option to disable this instruction.
(define_insn "*db" (define_insn "*db"
[(set (pc) [(set (pc)
(if_then_else (ne (match_operand:QI 0 "addr_reg_operand" "+a,!d,!m") (if_then_else (ne (match_operand:QI 2 "addr_reg_operand" "0,0,0,0")
(const_int 0)) (const_int 0))
(label_ref (match_operand 1 "" "")) (label_ref (match_operand 1 "" ""))
(pc))) (pc)))
(set (match_dup 0) (set (match_operand:QI 0 "addr_reg_operand" "+a,?*d,??*r,!m")
(plus:QI (match_dup 0) (plus:QI (match_dup 0)
(const_int -1)))] (const_int -1)))
(clobber (reg:CC_NOOV 21))]
"TARGET_DB && TARGET_LOOP_UNSIGNED" "TARGET_DB && TARGET_LOOP_UNSIGNED"
"* "*
if (IS_ADDR_REG (REGNO (operands[0]))) if (which_alternative == 0)
{ return \"dbu%#\\t%0,%l1\";
return \"dbu%#\\t%0,%l1\"; else if (which_alternative == 1)
} return c4x_output_cbranch (\"subi\\t1,%0\\n\\tbge\", insn);
else if (IS_EXT_REG (REGNO (operands[0]))) else if (which_alternative == 2)
{ return c4x_output_cbranch (\"subi\\t1,%0\\n\\tcmpi\\t0,%0\\n\\tbge\", insn);
return \"subi\\t1,%0\\n\\tbge%#\\t%l1\";
}
else else
{ return c4x_output_cbranch (\"push\\tr0\\n\\tldi\\t%0,r0\\n\\tsubi\\t1,r0\\n\\tsti\\tr0,%0\\n\\tpop\\tr0\\n\\tbhs\", insn);
return \"push\\tr0\\n\\tldi\\t%0,r0\\n\\tsubi\\t1,r0\\n\\tsti\\tr0,%0\\n\\tpop\\tr0\\n\\tbhs%#\\t%l1\";
}
" "
[(set_attr "type" "db")]) [(set_attr "type" "db,jmpc,jmpc,jmpc")])
(define_insn "decrement_and_branch_until_zero" (define_insn "decrement_and_branch_until_zero"
[(set (pc) [(set (pc)
(if_then_else (ge (plus:QI (match_operand:QI 0 "addr_reg_operand" "+a,!d,!m") (if_then_else (ge (plus:QI (match_operand:QI 2 "addr_reg_operand" "0,0,0,0")
(const_int -1)) (const_int 0)) (const_int -1))
(const_int 0))
(label_ref (match_operand 1 "" "")) (label_ref (match_operand 1 "" ""))
(pc))) (pc)))
(set (match_dup 0) (set (match_operand:QI 0 "addr_reg_operand" "+a,?*d,??*r,!m")
(plus:QI (match_dup 0) (plus:QI (match_dup 0)
(const_int -1)))] (const_int -1)))
(clobber (reg:CC_NOOV 21))]
"TARGET_DB && find_reg_note (insn, REG_NONNEG, 0)" "TARGET_DB && find_reg_note (insn, REG_NONNEG, 0)"
"* "*
if (IS_ADDR_REG (REGNO (operands[0]))) if (which_alternative == 0)
{ return \"dbu%#\\t%0,%l1\";
return \"dbu%#\\t%0,%l1\"; else if (which_alternative == 1)
} return c4x_output_cbranch (\"subi\\t1,%0\\n\\tbge\", insn);
else if (IS_EXT_REG (REGNO (operands[0]))) else if (which_alternative == 2)
{ return c4x_output_cbranch (\"subi\\t1,%0\\n\\tcmpi\\t0,%0\\n\\tbge\", insn);
return \"subi\\t1,%0\\n\\tbge%#\\t%l1\";
}
else else
{ return c4x_output_cbranch (\"push\\tr0\\n\\tldi\\t%0,r0\\n\\tsubi\\t1,r0\\n\\tsti\\tr0,%0\\n\\tpop\\tr0\\n\\tbhs\", insn);
return \"push\\tr0\\n\\tldi\\t%0,r0\\n\\tsubi\\t1,r0\\n\\tsti\\tr0,%0\\n\\t\\tpop\\tr0\\n\\tbhs%#\\t%l1\";
}
" "
[(set_attr "type" "db")]) [(set_attr "type" "db,jmpc,jmpc,jmpc")])
; ;
; MISC INSTRUCTIONS ; MISC INSTRUCTIONS
...@@ -4497,25 +4513,13 @@ ...@@ -4497,25 +4513,13 @@
"nop") "nop")
; Default to misc type attr. ; Default to misc type attr.
;
; RPTS
;
; Should we disallow RPTS if we get a silly number of shifts?
(define_insn "rpts"
[(set (reg:QI 27)
(unspec [(match_operand:QI 0 "src_operand" "g")] 2))
(clobber (reg:QI 25))
(clobber (reg:QI 26))]
""
"rpts\\t%0"
[(set_attr "type" "repeat")])
; ;
; RPTB ; RPTB
; ;
(define_insn "rptb_top" (define_insn "rptb_top"
[(set (reg:QI 25) (label_ref (match_operand 0 "" ""))) [(use (label_ref (match_operand 0 "" "")))
(set (reg:QI 26) (label_ref (match_operand 1 "" "")))] (use (label_ref (match_operand 1 "" "")))]
"" ""
"* "*
return !final_sequence && c4x_rptb_rpts_p (insn, operands[0]) return !final_sequence && c4x_rptb_rpts_p (insn, operands[0])
...@@ -4523,22 +4527,44 @@ ...@@ -4523,22 +4527,44 @@
" "
[(set_attr "type" "repeat_top")]) [(set_attr "type" "repeat_top")])
; This pattern needs to be emitted at the start of the loop to
; say that RS and RE are loaded.
(define_insn "init_branch_on_count"
[(unspec[(match_operand:QI 0 "rc_reg_operand" "v")] 22)
(clobber (reg:QI 25))
(clobber (reg:QI 26))]
""
""
[(set_attr "type" "repeat")])
; The RS (25) and RE (26) registers must be unviolate from the top of the loop
; to here.
(define_insn "rptb_end" (define_insn "rptb_end"
[(set (pc) [(set (pc)
(if_then_else (ge (match_operand:QI 0 "rc_reg_operand" "v") (if_then_else (ge (match_operand:QI 2 "rc_reg_operand" "0,0,0,0,0")
(const_int 0)) (const_int 0))
(label_ref (match_operand 1 "" "")) (label_ref (match_operand 1 "" ""))
(pc))) (pc)))
(set (match_dup 0) (set (match_operand:QI 0 "rc_reg_operand" "+v,*a,*d,*x*k,*m")
(plus:QI (match_dup 0) (plus:QI (match_dup 0)
(const_int -1))) (const_int -1)))
(clobber (reg:QI 25)) (use (reg:QI 25))
(clobber (reg:QI 26))] (use (reg:QI 26))
(clobber (reg:CC_NOOV 21))]
"" ""
"* "*
return c4x_rptb_nop_p(insn) ? \"nop\" : \"\";" if (which_alternative == 0)
[(set_attr "type" "repeat")]) return c4x_rptb_nop_p (insn) ? \"nop\" : \"\";
else if (which_alternative == 1)
return \"dbu%#\\t%0,%l1\";
else if (which_alternative == 2)
return c4x_output_cbranch (\"subi\\t1,%0\\n\\tbge\", insn);
else if (which_alternative == 3)
return c4x_output_cbranch (\"subi\\t1,%0\\n\\tcmpi\\t0,%0\\n\\tbge\", insn);
else
return c4x_output_cbranch (\"push\\tr0\\n\\tldi\\t%0,r0\\n\\tsubi\\t1,r0\\n\\tsti\\tr0,%0\\n\\tpop\\tr0\\n\\tbhs\", insn);
"
[(set_attr "type" "repeat,db,jmpc,jmpc,jmpc")])
(define_expand "decrement_and_branch_on_count" (define_expand "decrement_and_branch_on_count"
...@@ -4547,9 +4573,12 @@ ...@@ -4547,9 +4573,12 @@
(const_int 0)) (const_int 0))
(label_ref (match_operand 1 "" "")) (label_ref (match_operand 1 "" ""))
(pc))) (pc)))
(set (match_dup 0) (plus:QI (match_dup 0) (const_int -1))) (set (match_dup 0)
(clobber (reg:QI 25)) (plus:QI (match_dup 0)
(clobber (reg:QI 26))])] (const_int -1)))
(use (reg:QI 25))
(use (reg:QI 26))
(clobber (reg:CC_NOOV 21))])]
"" ""
"") "")
...@@ -4647,7 +4676,7 @@ ...@@ -4647,7 +4676,7 @@
int len = INTVAL (operands[2]); int len = INTVAL (operands[2]);
output_asm_insn (\"ldiu\\t*%1++,%4\", operands); output_asm_insn (\"ldiu\\t*%1++,%4\", operands);
if (TARGET_RPTS_CYCLES(len)) if (TARGET_RPTS_CYCLES (len))
{ {
output_asm_insn (\"rpts\\t%2-2\", operands); output_asm_insn (\"rpts\\t%2-2\", operands);
output_asm_insn (\"sti\\t%4,*%0++\", operands); output_asm_insn (\"sti\\t%4,*%0++\", operands);
...@@ -4665,7 +4694,7 @@ ...@@ -4665,7 +4694,7 @@
} }
} }
" "
[(set_attr "type" "repeat")]) [(set_attr "type" "multi")])
; Operand 2 is the count, operand 3 is the alignment. ; Operand 2 is the count, operand 3 is the alignment.
(define_expand "movstrqi" (define_expand "movstrqi"
...@@ -4684,8 +4713,8 @@ ...@@ -4684,8 +4713,8 @@
FAIL; /* Try to call _memcpy */ FAIL; /* Try to call _memcpy */
} }
operands[0] = copy_to_mode_reg (Pmode, XEXP(operands[0], 0)); operands[0] = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
operands[1] = copy_to_mode_reg (Pmode, XEXP(operands[1], 0)); operands[1] = copy_to_mode_reg (Pmode, XEXP (operands[1], 0));
tmp = gen_reg_rtx (QImode); tmp = gen_reg_rtx (QImode);
if (INTVAL (operands[2]) < 8) if (INTVAL (operands[2]) < 8)
emit_insn (gen_movstrqi_small (operands[0], operands[1], operands[2], emit_insn (gen_movstrqi_small (operands[0], operands[1], operands[2],
...@@ -4733,8 +4762,8 @@ ...@@ -4733,8 +4762,8 @@
{ {
FAIL; FAIL;
} }
operands[1] = copy_to_mode_reg (Pmode, XEXP(operands[1], 0)); operands[1] = copy_to_mode_reg (Pmode, XEXP (operands[1], 0));
operands[2] = copy_to_mode_reg (Pmode, XEXP(operands[2], 0)); operands[2] = copy_to_mode_reg (Pmode, XEXP (operands[2], 0));
operands[5] = gen_reg_rtx (QImode); operands[5] = gen_reg_rtx (QImode);
}") }")
...@@ -5116,7 +5145,7 @@ ...@@ -5116,7 +5145,7 @@
FAIL; FAIL;
else else
{ {
emit_insn (gen_sqrthf2_inline( operands[0], operands[1])); emit_insn (gen_sqrthf2_inline (operands[0], operands[1]));
DONE; DONE;
} }
") ")
...@@ -5269,7 +5298,7 @@ ...@@ -5269,7 +5298,7 @@
} }
else else
{ {
emit_insn (gen_divhf3_inline( operands[0], operands[1], operands[2])); emit_insn (gen_divhf3_inline (operands[0], operands[1], operands[2]));
DONE; DONE;
} }
") ")
...@@ -6122,14 +6151,15 @@ ...@@ -6122,14 +6151,15 @@
(parallel (parallel
[(set (pc) [(set (pc)
(if_then_else (if_then_else
(ge (plus:QI (match_operand:QI 0 "addr_reg_operand" "+a") (ge (plus:QI (match_operand:QI 4 "addr_reg_operand" "0")
(const_int -1)) (const_int -1))
(const_int 0)) (const_int 0))
(label_ref (match_operand 1 "" "")) (label_ref (match_operand 1 "" ""))
(pc))) (pc)))
(set (match_dup 0) (set (match_operand:QI 0 "addr_reg_operand" "+a")
(plus:QI (match_dup 0) (plus:QI (match_dup 0)
(const_int -1)))])] (const_int -1)))
(clobber (reg:CC_NOOV 21))])]
"!c4x_label_conflict (insn, operands[2], operands[1])" "!c4x_label_conflict (insn, operands[2], operands[1])"
"db%I3\\t%0,%l1\\n\\tb%3\\t%l2") "db%I3\\t%0,%l1\\n\\tb%3\\t%l2")
...@@ -6141,13 +6171,14 @@ ...@@ -6141,13 +6171,14 @@
(parallel (parallel
[(set (pc) [(set (pc)
(if_then_else (if_then_else
(ne (match_operand:QI 0 "addr_reg_operand" "+a") (ne (match_operand:QI 4 "addr_reg_operand" "0")
(const_int 0)) (const_int 0))
(label_ref (match_operand 1 "" "")) (label_ref (match_operand 1 "" ""))
(pc))) (pc)))
(set (match_dup 0) (set (match_operand:QI 0 "addr_reg_operand" "+a")
(plus:QI (match_dup 0) (plus:QI (match_dup 0)
(const_int -1)))])] (const_int -1)))
(clobber (reg:CC_NOOV 21))])]
"!c4x_label_conflict (insn, operands[2], operands[1])" "!c4x_label_conflict (insn, operands[2], operands[1])"
"db%I3\\t%0,%l1\\n\\tb%3\\t%l2") "db%I3\\t%0,%l1\\n\\tb%3\\t%l2")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment