aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2000-10-13 15:54:16 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>2000-10-13 15:54:16 +0000
commitc7319d87dbcb3c2b6e7ffa194eb3854690bc9e90 (patch)
tree08f1a2be928b0dd472802b5f0a077306e1773ed1 /gcc
parentfccf9848508741311fc9d64abc69a799e8162ee8 (diff)
downloadgcc-c7319d87dbcb3c2b6e7ffa194eb3854690bc9e90.zip
gcc-c7319d87dbcb3c2b6e7ffa194eb3854690bc9e90.tar.gz
gcc-c7319d87dbcb3c2b6e7ffa194eb3854690bc9e90.tar.bz2
arm.c: Include obstack.h
* arm.c: Include obstack.h (minipool_obstack, minipool_startobj): Define. (arm_add_gc_roots): Initialize them. (create_fix_barrier): Use our new obstack. (push_minipool_barrier, push_minipool_fix): Likewise. (arm_reorg): Release obstack memory. From-SVN: r36860
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/arm/arm.c21
2 files changed, 26 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0bd5e1e..fccc2b7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2000-10-13 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm.c: Include obstack.h
+ (minipool_obstack, minipool_startobj): Define.
+ (arm_add_gc_roots): Initialize them.
+ (create_fix_barrier): Use our new obstack.
+ (push_minipool_barrier, push_minipool_fix): Likewise.
+ (arm_reorg): Release obstack memory.
+
2000-10-13 Jakub Jelinek <jakub@redhat.com>
* config/sparc/sparc.md (nonlocal_goto_receiver): Remove.
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 777c6a5..854835d 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -25,6 +25,7 @@ Boston, MA 02111-1307, USA. */
#include "system.h"
#include "rtl.h"
#include "tree.h"
+#include "obstack.h"
#include "regs.h"
#include "hard-reg-set.h"
#include "real.h"
@@ -99,6 +100,13 @@ static int current_file_function_operand PARAMS ((rtx));
#undef Mmode
#undef Ulong
+/* Obstack for minipool constant handling. */
+static struct obstack minipool_obstack;
+static char *minipool_startobj;
+
+#define obstack_chunk_alloc xmalloc
+#define obstack_chunk_free free
+
/* The maximum number of insns skipped which will be conditionalised if
possible. */
static int max_insns_skipped = 5;
@@ -662,7 +670,9 @@ arm_add_gc_roots ()
ggc_add_rtx_root (&arm_compare_op0, 1);
ggc_add_rtx_root (&arm_compare_op1, 1);
ggc_add_rtx_root (&arm_target_insn, 1); /* Not sure this is really a root */
- /* XXX: What about the minipool tables? */
+
+ gcc_obstack_init(&minipool_obstack);
+ minipool_startobj = (char *) obstack_alloc (&minipool_obstack, 0);
}
/* Return 1 if it is possible to return using a single instruction. */
@@ -5375,7 +5385,7 @@ create_fix_barrier (fix, max_address)
emit_label_after (label, barrier);
/* Create a minipool barrier entry for the new barrier. */
- new_fix = (Mfix *) oballoc (sizeof (* new_fix));
+ new_fix = (Mfix *) obstack_alloc (&minipool_obstack, sizeof (* new_fix));
new_fix->insn = barrier;
new_fix->address = selected_address;
new_fix->next = fix->next;
@@ -5391,7 +5401,7 @@ push_minipool_barrier (insn, address)
rtx insn;
HOST_WIDE_INT address;
{
- Mfix * fix = (Mfix *) oballoc (sizeof (* fix));
+ Mfix * fix = (Mfix *) obstack_alloc (&minipool_obstack, sizeof (* fix));
fix->insn = insn;
fix->address = address;
@@ -5418,7 +5428,7 @@ push_minipool_fix (insn, address, loc, mode, value)
enum machine_mode mode;
rtx value;
{
- Mfix * fix = (Mfix *) oballoc (sizeof (* fix));
+ Mfix * fix = (Mfix *) obstack_alloc (&minipool_obstack, sizeof (* fix));
#ifdef AOF_ASSEMBLER
/* PIC symbol refereneces need to be converted into offsets into the
@@ -5671,6 +5681,9 @@ arm_reorg (first)
directly. This can happen if the RTL gets split during final
instruction generation. */
after_arm_reorg = 1;
+
+ /* Free the minipool memory. */
+ obstack_free (&minipool_obstack, minipool_startobj);
}
/* Routines to output assembly language. */