diff options
author | Richard Stallman <rms@gnu.org> | 1993-07-24 22:20:55 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1993-07-24 22:20:55 +0000 |
commit | c937357e3adcea76ec866a13a6e599dda464ab48 (patch) | |
tree | 704b1fdacb764ba695b83413ae9f09b6763645d5 /gcc | |
parent | 255fccf375d17bd035295dff96cf29116a4b2b79 (diff) | |
download | gcc-c937357e3adcea76ec866a13a6e599dda464ab48.zip gcc-c937357e3adcea76ec866a13a6e599dda464ab48.tar.gz gcc-c937357e3adcea76ec866a13a6e599dda464ab48.tar.bz2 |
(emit_move_insn_1): For complex stack push, don't use change_address.
From-SVN: r4983
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/expr.c | 33 |
1 files changed, 25 insertions, 8 deletions
@@ -1648,14 +1648,31 @@ emit_move_insn_1 (x, y) In that case, change_address is used only to convert the mode, not to change the address. */ - emit_insn (GEN_FCN (mov_optab->handlers[(int) submode].insn_code) - ((stack ? change_address (x, submode, (rtx) 0) - : gen_highpart (submode, x)), - gen_highpart (submode, y))); - emit_insn (GEN_FCN (mov_optab->handlers[(int) submode].insn_code) - ((stack ? change_address (x, submode, (rtx) 0) - : gen_lowpart (submode, x)), - gen_lowpart (submode, y))); + if (stack) + { +#ifdef STACK_GROWS_DOWNWARD + emit_insn (GEN_FCN (mov_optab->handlers[(int) submode].insn_code) + (gen_rtx (MEM, submode, (XEXP (x, 0))), + gen_highpart (submode, y))); + emit_insn (GEN_FCN (mov_optab->handlers[(int) submode].insn_code) + (gen_rtx (MEM, submode, (XEXP (x, 0))), + gen_lowpart (submode, y))); +#else + emit_insn (GEN_FCN (mov_optab->handlers[(int) submode].insn_code) + (gen_rtx (MEM, submode, (XEXP (x, 0))), + gen_lowpart (submode, y))); + emit_insn (GEN_FCN (mov_optab->handlers[(int) submode].insn_code) + (gen_rtx (MEM, submode, (XEXP (x, 0))), + gen_highpart (submode, y))); +#endif + } + else + { + emit_insn (GEN_FCN (mov_optab->handlers[(int) submode].insn_code) + (gen_highpart (submode, x), gen_highpart (submode, y))); + emit_insn (GEN_FCN (mov_optab->handlers[(int) submode].insn_code) + (gen_lowpart (submode, x), gen_lowpart (submode, y))); + } group_insns (prev); |