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.

Attachment: patch_fixed
Description: Binary data



Reply via email to