aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMichael Hayes <m.hayes@elec.canterbury.ac.nz>2001-01-05 04:09:02 +0000
committerMichael Hayes <m.hayes@gcc.gnu.org>2001-01-05 04:09:02 +0000
commit69f6e760a80eef94fa88119e4f2ac4c63353dc78 (patch)
treedf5ec5d0fffb94a39b2304b56fa43f334259b69a /gcc
parent06dd70c652a8ca50e09037918bf4ef804ac1d601 (diff)
downloadgcc-69f6e760a80eef94fa88119e4f2ac4c63353dc78.zip
gcc-69f6e760a80eef94fa88119e4f2ac4c63353dc78.tar.gz
gcc-69f6e760a80eef94fa88119e4f2ac4c63353dc78.tar.bz2
c4x.c (c4x_expand_prologue): Don't compile an ISR with more than 32767 words of local storage.
* config/c4x/c4x.c (c4x_expand_prologue): Don't compile an ISR with more than 32767 words of local storage. From-SVN: r38703
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/c4x/c4x.c11
2 files changed, 13 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a710137..fd4905a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2001-01-05 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
+ * config/c4x/c4x.c (c4x_expand_prologue): Don't compile an ISR
+ with more than 32767 words of local storage.
+
+2001-01-05 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
+
* config/c4x/c4x.c (c4x_init_builtins): Remove builtin support
for 'abs', 'labs', and 'fabs'.
(c4x_expand_builtin): Likewise.
diff --git a/gcc/config/c4x/c4x.c b/gcc/config/c4x/c4x.c
index 230b54c..496da47 100644
--- a/gcc/config/c4x/c4x.c
+++ b/gcc/config/c4x/c4x.c
@@ -826,10 +826,15 @@ c4x_expand_prologue ()
insn = emit_insn (gen_movqi (gen_rtx_REG (QImode, AR3_REGNO),
gen_rtx_REG (QImode, SP_REGNO)));
RTX_FRAME_RELATED_P (insn) = 1;
- /* FIXME: Assume ISR doesn't require more than 32767 words
- of local variables. */
+ /* We require that an ISR uses fewer than 32768 words of
+ local variables, otherwise we have to go to lots of
+ effort to save a register, load it with the desired size,
+ adjust the stack pointer, and then restore the modified
+ register. Frankly, I think it is a poor ISR that
+ requires more than 32767 words of local temporary
+ storage! */
if (size > 32767)
- error ("ISR %s requires %d words of local vars, max is 32767.",
+ fatal ("ISR %s requires %d words of local vars, max is 32767.",
current_function_name, size);
insn = emit_insn (gen_addqi3 (gen_rtx_REG (QImode, SP_REGNO),
gen_rtx_REG (QImode, SP_REGNO),