Chung-Ju Wu <jasonw...@gmail.com> writes: > + /* Use $r15, if the value is NOT in the range of Is20, > + we must output "sethi + ori" directly since > + we may already passed the split stage. */ > + return "sethi\t%0, hi20(%1)\;ori\t%0, %0, lo12(%1)"; > + case 17: > + return "#";
I don't really understand the comment for case 16. Returning "#" (like for case 17) forces a split even at the output stage. In this case it might not be worth forcing a split though, so I don't see any need to change the code. I think the comment should be changed to give a different reason though. > + /* Note that (le:SI X INT_MAX) is not the same as (lt:SI X INT_MIN). > + We better have an assert here in case GCC does not properly > + optimize it away. */ > + gcc_assert (code != LE || INTVAL (operands[2]) != INT_MAX); Sorry, I was being lazy when I said INT_MAX. I really meant INT_MAX on the target (assuming SImode == int), whereas INT_MAX here is a host thing. 0x7fffffff would be OK. > + /* Create RbRe_str string. > + Note that we need to output ',' character if there exists En4 field. */ > + if (REGNO (operands[0]) != SP_REGNUM && REGNO (operands[1]) != SP_REGNUM) > + RbRe_str = INTVAL (operands[2]) != 0 ? "%0, %1, " : "%0, %1"; > + else > + RbRe_str = ""; The "RbRe_str =" lines should only be indented by 2 extra spaces, not 4. Same for pop. Looks good otherwise, thanks. Richard