diff options
author | Michael Meissner <meissner@gcc.gnu.org> | 1996-02-15 23:35:34 +0000 |
---|---|---|
committer | Michael Meissner <meissner@gcc.gnu.org> | 1996-02-15 23:35:34 +0000 |
commit | cea05fab5258188afcd73a957e89a9eb06d5e010 (patch) | |
tree | 6316c8d210dcbab5ed23c7b652fb2299f4add8ea | |
parent | 10568ad0dd64fc868941cb4f21d05ac802708c24 (diff) | |
download | gcc-cea05fab5258188afcd73a957e89a9eb06d5e010.zip gcc-cea05fab5258188afcd73a957e89a9eb06d5e010.tar.gz gcc-cea05fab5258188afcd73a957e89a9eb06d5e010.tar.bz2 |
Fix alloca on NT
From-SVN: r11280
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index f3476bd..38ce9eb 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -6336,9 +6336,10 @@ if (DEFAULT_ABI == ABI_NT && (GET_CODE (operands[0]) != CONST_INT || INTVAL (operands[0]) > 4096)) { - emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"__allocate_stack\"), 0, - VOIDmode, 1, - operands[0], Pmode); + rtx tmp = gen_reg_rtx (SImode); + emit_library_call_value (gen_rtx (SYMBOL_REF, Pmode, \"__allocate_stack\"), + tmp, 0, SImode, 1, operands[0], Pmode); + emit_insn (gen_set_sp (tmp)); DONE; } @@ -6363,6 +6364,16 @@ DONE; }") +;; Marker to indicate that the stack pointer was changed under NT in +;; ways not known to the compiler + +(define_insn "set_sp" + [(set (reg:SI 1) + (unspec [(match_operand:SI 0 "register_operand" "r")] 7))] + "" + "" + [(set_attr "length" "0")]) + ;; These patterns say how to save and restore the stack pointer. We need not ;; save the stack pointer at function level since we are careful to ;; preserve the backchain. At block level, we have to restore the backchain |