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.

Reply via email to