split lui_movf pattern on mips?
Amker.Cheng
amker.cheng@gmail.com
Fri Apr 30 08:37:00 GMT 2010
HI:
There is comment on lui_movf in mips.md like following,
;; because we don't split it. FIXME: we should split instead.
I can split it into a move and a condmove(movesi_on_cc) insns , like
(define_split
[(set (match_operand:CC 0 "d_operand" "")
(match_operand:CC 1 "fcc_reload_operand" ""))]
"reload_completed && ISA_HAS_8CC && TARGET_HARD_FLOAT && ISA_HAS_CONDMOVE
&& !CANNOT_CHANGE_MODE_CLASS(CCmode, SImode,
REGNO_REG_CLASS(REGNO(operands[0])))"
[(set (match_dup 2) (match_dup 3))
(set (match_dup 2)
(if_then_else:SI
(eq:SI (match_dup 1)
(match_dup 4))
(match_dup 2)
(match_dup 4)))]
"
{
operands[2] = gen_rtx_REG(SImode, REGNO(operands[0]));
operands[3] = GEN_INT(0x3f800000);
operands[4] = const0_rtx;
}
")
But I have two questions.
Firstly, the lui_movf pattern is output as
"lui\t%0,0x3f80\n\tmovf\t%0,%.,%1" in mips_output_move,
why 0x3f80? is it some kind of magic number, or anything else important?
Secondly, I have to change mode of operands[0] into SImode when
splitting, otherwise there is no
insn pattern matching the first insn generated.
Since no new REG generated I assuming the mode transforming is OK
here, any suggestion?
Thanks.
--
Best Regards.
More information about the Gcc
mailing list