aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-04-25 17:05:37 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-04-25 17:05:37 -0400
commit34aa3599f159bba2ea3fdc9a08324402d8003b89 (patch)
treeee2e261e263b54d3e3b90661f27226889b62962a /gcc
parentc89e8dc28f98fbe84c9e4b3edbfa2c38094c16e6 (diff)
downloadgcc-34aa3599f159bba2ea3fdc9a08324402d8003b89.zip
gcc-34aa3599f159bba2ea3fdc9a08324402d8003b89.tar.gz
gcc-34aa3599f159bba2ea3fdc9a08324402d8003b89.tar.bz2
(convert_move): Don't access a hard reg in an invalid mode when doing
a truncation. From-SVN: r9447
Diffstat (limited to 'gcc')
-rw-r--r--gcc/expr.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 656d825..c76feb0 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -1081,6 +1081,9 @@ convert_move (to, from, unsignedp)
|| GET_CODE (from) == REG
|| GET_CODE (from) == SUBREG))
from = force_reg (from_mode, from);
+ if (GET_CODE (from) == REG && REGNO (from) < FIRST_PSEUDO_REGISTER
+ && ! HARD_REGNO_MODE_OK (REGNO (from), to_mode))
+ from = copy_to_reg (from);
emit_move_insn (to, gen_lowpart (to_mode, from));
return;
}