Fixed it. Thanks. On Fri, Oct 2, 2015 at 6:45 PM, Uros Bizjak <ubiz...@gmail.com> wrote: > On Fri, Oct 2, 2015 at 2:51 PM, Yulia Koval <vaalfr...@gmail.com> wrote: >> Hi, >> Here is a new patch. Added HJ's changes and review changes. >> >> Implement x86 interrupt attribute > > + incoming_stack_boundary > + = (crtl->parm_stack_boundary > ix86_incoming_stack_boundary > + ? crtl->parm_stack_boundary : ix86_incoming_stack_boundary); > > MAX (crtl->parm_stack_boundary, ix86_incoming_stack_boundary); > > +bool > +ix86_epilogue_uses (int regno) > +{ > + /* If there are no caller-saved registers, we preserve all registers, > + except for MMX and x87 registers which aren't supported when saving > + and restoring registers. Don't explicitly save SP register since > + it is always preserved. */ > + return (cfun->machine->no_caller_saved_registers > + && reg_names[regno][0] > + && !fixed_regs[regno] > + && !STACK_REGNO_P (regno) > + && !MMX_REGNO_P (regno)); > > There is still a redundant check for reg_names with !fixed_regs. When > member of fixed_regs is 0, we are sure that corresponding reg_names is > non-null. As can be seen in ix86_conditional_register_usage, register > names are squashed depending on target for non-existent registers in > order to prevent their usage in "asm" statements. > > + /* If there are no caller-saved registers, add all registers > + that are clobbered by the call. */ > + for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++) > + if (reg_names[i][0] > + && !fixed_regs[i] > + && (ix86_call_used_regs[i] == 1 > + || (ix86_call_used_regs[i] & c_mask)) > + && !STACK_REGNO_P (i) > + && !MMX_REGNO_P (i)) > > And here. > > Uros.
patch_fixed
Description: Binary data