diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-05-30 12:38:00 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-05-30 12:38:00 -0400 |
commit | 44f51d4ad58ade74ccf9f72d488bb47b40d8e284 (patch) | |
tree | 4d6bbe417cf4011ba10331dad6fe7fae2b1f6fdc /gcc | |
parent | 3537b3d40682dffcf780f6236f6036645b874e30 (diff) | |
download | gcc-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.c | 13 |
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. */ |