aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-05-30 12:38:00 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-05-30 12:38:00 -0400
commit44f51d4ad58ade74ccf9f72d488bb47b40d8e284 (patch)
tree4d6bbe417cf4011ba10331dad6fe7fae2b1f6fdc /gcc
parent3537b3d40682dffcf780f6236f6036645b874e30 (diff)
downloadgcc-44f51d4ad58ade74ccf9f72d488bb47b40d8e284.zip
gcc-44f51d4ad58ade74ccf9f72d488bb47b40d8e284.tar.gz
gcc-44f51d4ad58ade74ccf9f72d488bb47b40d8e284.tar.bz2
(expand_float): Fix error in last change.
From-SVN: r7391
Diffstat (limited to 'gcc')
-rw-r--r--gcc/optabs.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c
index b3b6ea9..418e529 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -3083,6 +3083,12 @@ expand_float (to, from, unsignedp)
rtx temp1;
rtx neglabel = gen_label_rtx ();
+ /* Don't use TARGET if it isn't a register or is a
+ hard register. */
+ if (GET_CODE (target) != REG
+ || REGNO (target) < FIRST_PSEUDO_REGISTER)
+ target = gen_reg_rtx (fmode);
+
imode = GET_MODE (from);
do_pending_stack_adjust ();
@@ -3101,11 +3107,10 @@ expand_float (to, from, unsignedp)
emit_label (neglabel);
temp = expand_binop (imode, and_optab, from, const1_rtx,
- 0, 1, 0);
+ 0, 1, 0);
temp1 = expand_binop (imode, lshr_optab, from, const1_rtx,
- from, 1, 0);
- temp = expand_binop (imode, ior_optab, temp, temp1,
- temp, 1, 0);
+ 0, 1, 0);
+ temp = expand_binop (imode, ior_optab, temp, temp1, temp, 1, 0);
expand_float (target, temp, 0);
/* Multiply by 2 to undo the shift above. */