diff options
author | Michael Meissner <meissner@gcc.gnu.org> | 1996-10-10 22:16:37 +0000 |
---|---|---|
committer | Michael Meissner <meissner@gcc.gnu.org> | 1996-10-10 22:16:37 +0000 |
commit | 62c0fb87d5e5df1038d45a7a9a51e2c0822468a7 (patch) | |
tree | 2dcf065ce4e64bd3726dcf1860945cb69e858dde | |
parent | 91760fceca4e9599d3f3b6dcae5729dc150a93bb (diff) | |
download | gcc-62c0fb87d5e5df1038d45a7a9a51e2c0822468a7.zip gcc-62c0fb87d5e5df1038d45a7a9a51e2c0822468a7.tar.gz gcc-62c0fb87d5e5df1038d45a7a9a51e2c0822468a7.tar.bz2 |
Correctly handle saving toc space in NT
From-SVN: r12946
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 14 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 2 |
2 files changed, 2 insertions, 14 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index cb65dcf..fafaba9 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -95,9 +95,6 @@ char *rs6000_sdata_name = (char *)0; /* Whether a System V.4 varargs area was created. */ int rs6000_sysv_varargs_p; -/* Whether we need to save the TOC register. */ -int rs6000_save_toc_p; - /* ABI enumeration available for subtarget to use. */ enum rs6000_abi rs6000_current_abi; @@ -2236,7 +2233,6 @@ rs6000_save_machine_status (p) p->machine = machine; machine->sysv_varargs_p = rs6000_sysv_varargs_p; - machine->save_toc_p = rs6000_save_toc_p; machine->fpmem_size = rs6000_fpmem_size; machine->fpmem_offset = rs6000_fpmem_offset; } @@ -2248,7 +2244,6 @@ rs6000_restore_machine_status (p) struct machine_function *machine = p->machine; rs6000_sysv_varargs_p = machine->sysv_varargs_p; - rs6000_save_toc_p = machine->save_toc_p; rs6000_fpmem_size = machine->fpmem_size; rs6000_fpmem_offset = machine->fpmem_offset; @@ -2263,7 +2258,6 @@ rs6000_init_expanders () { /* Reset varargs and save TOC indicator */ rs6000_sysv_varargs_p = 0; - rs6000_save_toc_p = 0; rs6000_fpmem_size = 0; rs6000_fpmem_offset = 0; pic_offset_table_rtx = (rtx)0; @@ -3023,8 +3017,8 @@ rs6000_stack_info () /* Does this function call anything? */ info_ptr->calls_p = rs6000_makes_calls (); - /* Do we need to allocate space to save the toc? */ - if (rs6000_save_toc_p) + /* Allocate space to save the toc. */ + if (abi == ABI_NT) { info_ptr->toc_save_p = 1; info_ptr->toc_size = reg_size; @@ -3483,10 +3477,6 @@ output_prolog (file, size) reg_names[sp_reg]); } - if (info->toc_save_p) - asm_fprintf (file, store_reg, reg_names[2], info->toc_save_offset + sp_offset, - reg_names[sp_reg]); - /* NT needs us to probe the stack frame every 4k pages for large frames, so do it here. */ if (DEFAULT_ABI == ABI_NT && info->total_size > 4096) diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index b24704e..9c93f9b 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -7212,7 +7212,6 @@ else if (DEFAULT_ABI == ABI_NT) { /* NT function pointers are really pointers to a two word area */ - rs6000_save_toc_p = 1; emit_call_insn (gen_call_indirect_nt (force_reg (Pmode, operands[0]), operands[1], operands[2], toc_addr, toc_reg)); @@ -7272,7 +7271,6 @@ else if (DEFAULT_ABI == ABI_NT) { /* NT function pointers are really pointers to a two word area */ - rs6000_save_toc_p = 1; emit_call_insn (gen_call_value_indirect_nt (operands[0], force_reg (Pmode, operands[1]), operands[2], operands[3], |