diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-10-21 12:03:21 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-10-21 12:03:21 +0000 |
commit | 6ea7ed3e747841f1484d8fe7539cb0633121b603 (patch) | |
tree | 29e2e609b76c6706d6eade266c76dbbd6faa724a /gcc/config/i386 | |
parent | a44fa5565a54d06b65783cf4ecd5594e63c13ce6 (diff) | |
download | gcc-6ea7ed3e747841f1484d8fe7539cb0633121b603.tar.gz |
2009-10-21 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 153054
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@153056 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/i386')
-rw-r--r-- | gcc/config/i386/cygming.h | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 65 |
2 files changed, 35 insertions, 35 deletions
diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index 43003cc5cad..cdab21c91a2 100644 --- a/gcc/config/i386/cygming.h +++ b/gcc/config/i386/cygming.h @@ -49,8 +49,9 @@ along with GCC; see the file COPYING3. If not see target, always use the svr4_dbx_register_map for DWARF .eh_frame even if we don't use DWARF .debug_frame. */ #undef DWARF_FRAME_REGNUM -#define DWARF_FRAME_REGNUM(n) TARGET_64BIT \ - ? dbx64_register_map[(n)] : svr4_dbx_register_map[(n)] +#define DWARF_FRAME_REGNUM(n) \ + (TARGET_64BIT ? dbx64_register_map[(n)] \ + : svr4_dbx_register_map[(n)]) #ifdef HAVE_GAS_PE_SECREL32_RELOC /* Use section relative relocations for debugging offsets. Unlike diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 73913b8376d..6065f49a042 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -8332,39 +8332,39 @@ ix86_expand_prologue (void) rtx push, mov; /* Make sure the function starts with - 8b ff movl.s %edi,%edi - 55 push %ebp - 8b ec movl.s %esp,%ebp - - This matches the hookable function prologue in Win32 API functions in Microsoft Windows - XP Service Pack 2 and newer. Wine uses this to enable Windows apps to hook the Win32 API - functions provided by Wine */ - insn = emit_insn (gen_vswapmov (gen_rtx_REG (SImode, DI_REG), gen_rtx_REG (SImode, DI_REG))); + 8b ff movl.s %edi,%edi + 55 push %ebp + 8b ec movl.s %esp,%ebp + + This matches the hookable function prologue in Win32 API + functions in Microsoft Windows XP Service Pack 2 and newer. + Wine uses this to enable Windows apps to hook the Win32 API + functions provided by Wine. */ + insn = emit_insn (gen_vswapmov (gen_rtx_REG (SImode, DI_REG), + gen_rtx_REG (SImode, DI_REG))); push = emit_insn (gen_push (hard_frame_pointer_rtx)); - mov = emit_insn (gen_vswapmov (hard_frame_pointer_rtx, stack_pointer_rtx)); + mov = emit_insn (gen_vswapmov (hard_frame_pointer_rtx, + stack_pointer_rtx)); - if (frame_pointer_needed && !(crtl->drap_reg && crtl->stack_realign_needed)) - { - /* The push %ebp and movl.s %esp, %ebp already set up the frame pointer. No need to do - this again. */ - gen_frame_pointer = 0; - RTX_FRAME_RELATED_P (push) = 1; - RTX_FRAME_RELATED_P (mov) = 1; - if (ix86_cfa_state->reg == stack_pointer_rtx) - { - ix86_cfa_state->reg = hard_frame_pointer_rtx; - } - } + if (frame_pointer_needed && !(crtl->drap_reg + && crtl->stack_realign_needed)) + { + /* The push %ebp and movl.s %esp, %ebp already set up + the frame pointer. No need to do this again. */ + gen_frame_pointer = 0; + RTX_FRAME_RELATED_P (push) = 1; + RTX_FRAME_RELATED_P (mov) = 1; + if (ix86_cfa_state->reg == stack_pointer_rtx) + ix86_cfa_state->reg = hard_frame_pointer_rtx; + } else - { - /* If the frame pointer is not needed, pop %ebp again. This could be optimized for cases where - ebp needs to be backed up for some other reason. - - If stack realignment is needed, pop the base pointer again, align the stack, and later - regenerate the frame pointer setup. The frame pointer generated by the hook prologue - is not aligned, so it can't be used */ - insn = emit_insn ((*ix86_gen_pop1) (hard_frame_pointer_rtx)); - } + /* If the frame pointer is not needed, pop %ebp again. This + could be optimized for cases where ebp needs to be backed up + for some other reason. If stack realignment is needed, pop + the base pointer again, align the stack, and later regenerate + the frame pointer setup. The frame pointer generated by the + hook prologue is not aligned, so it can't be used. */ + insn = emit_insn ((*ix86_gen_pop1) (hard_frame_pointer_rtx)); } /* The first insn of a function that accepts its static chain on the @@ -9022,7 +9022,8 @@ ix86_expand_epilogue (int style) 0, red_offset, style == 2); pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, - GEN_INT (frame.nsseregs * 16 + frame.padding0), + GEN_INT (frame.nsseregs * 16 + + frame.padding0), style, false); } else if (frame.to_allocate || frame.padding0 || frame.nsseregs) @@ -26530,8 +26531,6 @@ ix86_handle_struct_attribute (tree *node, tree name, return NULL_TREE; } -#include <signal.h> - static tree ix86_handle_fndecl_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED, |