diff options
author | Alexandre Oliva <oliva@lsd.ic.unicamp.br> | 2000-01-26 07:57:28 +0000 |
---|---|---|
committer | Alexandre Oliva <oliva@gcc.gnu.org> | 2000-01-26 07:57:28 +0000 |
commit | c77f46c67efa4aca7b8f0808c5de7e589cc44f15 (patch) | |
tree | 049646eb341d43c241a691e41d5485f9e89e61e3 /gcc | |
parent | cef40e9fa4dd4e57384cc870db87d1e9cf4d7e97 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/alpha/alpha.c | 16 |
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])); } |