aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlexandre Oliva <oliva@lsd.ic.unicamp.br>2000-01-26 07:57:28 +0000
committerAlexandre Oliva <oliva@gcc.gnu.org>2000-01-26 07:57:28 +0000
commitc77f46c67efa4aca7b8f0808c5de7e589cc44f15 (patch)
tree049646eb341d43c241a691e41d5485f9e89e61e3 /gcc
parentcef40e9fa4dd4e57384cc870db87d1e9cf4d7e97 (diff)
downloadgcc-c77f46c67efa4aca7b8f0808c5de7e589cc44f15.zip
gcc-c77f46c67efa4aca7b8f0808c5de7e589cc44f15.tar.gz
gcc-c77f46c67efa4aca7b8f0808c5de7e589cc44f15.tar.bz2
alpha.c (alpha_emit_xfloating_cvt): Do not assume incoming operands array is large enough for one more operand.
* config/alpha/alpha.c (alpha_emit_xfloating_cvt): Do not assume incoming operands array is large enough for one more operand. (alpha_emit_xfloating_arith): Likewise. From-SVN: r31629
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/alpha/alpha.c16
2 files changed, 17 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 45ab0671..1f9c6f1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2000-01-26 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * config/alpha/alpha.c (alpha_emit_xfloating_cvt): Do not assume
+ incoming operands array is large enough for one more operand.
+ (alpha_emit_xfloating_arith): Likewise.
+
2000-01-25 Zack Weinberg <zack@wolery.cumb.org>
* fixinc/Makefile.in (machname.h): SunOS 4 sed can't handle a
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index fa59cc1..23faed8 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -1936,12 +1936,15 @@ alpha_emit_xfloating_arith (code, operands)
{
const char *func;
int mode;
+ rtx out_operands[3];
func = alpha_lookup_xfloating_lib_func (code);
mode = alpha_compute_xfloating_mode_arg (code, alpha_fprm);
- operands[3] = GEN_INT (mode);
- alpha_emit_xfloating_libcall (func, operands[0], operands+1, 3,
+ out_operands[0] = operands[1];
+ out_operands[1] = operands[2];
+ out_operands[2] = GEN_INT (mode);
+ alpha_emit_xfloating_libcall (func, operands[0], out_operands, 3,
gen_rtx_fmt_ee (code, TFmode, operands[1],
operands[2]));
}
@@ -1978,27 +1981,30 @@ alpha_emit_xfloating_cvt (code, operands)
rtx operands[];
{
int noperands = 1, mode;
+ rtx out_operands[2];
const char *func;
func = alpha_lookup_xfloating_lib_func (code);
+ out_operands[0] = operands[1];
+
switch (code)
{
case FIX:
mode = alpha_compute_xfloating_mode_arg (code, ALPHA_FPRM_CHOP);
- operands[2] = GEN_INT (mode);
+ out_operands[1] = GEN_INT (mode);
noperands = 2;
break;
case FLOAT_TRUNCATE:
mode = alpha_compute_xfloating_mode_arg (code, alpha_fprm);
- operands[2] = GEN_INT (mode);
+ out_operands[1] = GEN_INT (mode);
noperands = 2;
break;
default:
break;
}
- alpha_emit_xfloating_libcall (func, operands[0], operands+1, noperands,
+ alpha_emit_xfloating_libcall (func, operands[0], out_operands, noperands,
gen_rtx_fmt_e (code, GET_MODE (operands[0]),
operands[1]));
}