diff options
author | tege <tege@138bc75d-0d04-0410-961f-82ee72b054a4> | 1994-06-29 00:21:32 +0000 |
---|---|---|
committer | tege <tege@138bc75d-0d04-0410-961f-82ee72b054a4> | 1994-06-29 00:21:32 +0000 |
commit | 7e4a644d480cda759775a5d658778a9781de1ada (patch) | |
tree | ba373501a32fa00e4a9459910ee4aafed75fbfc6 /gcc/optabs.c | |
parent | 15ca565e591721ded4a67ec11a07d1b25152466b (diff) | |
download | ppe42-gcc-7e4a644d480cda759775a5d658778a9781de1ada.tar.gz ppe42-gcc-7e4a644d480cda759775a5d658778a9781de1ada.zip |
(smul_highpart_optab, umul_highpart_optab): New variables.
(expand_binop): Handle [us]mul_highpart_optab as commutative.
(init_optabs): Initialize [us]mul_highpart_optab.
(expand_binop): Convert OP0 to mode for library calls.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@7595 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r-- | gcc/optabs.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c index 7eaa809bbf0..df2f8c94ea3 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -42,6 +42,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ optab add_optab; optab sub_optab; optab smul_optab; +optab smul_highpart_optab; +optab umul_highpart_optab; optab smul_widen_optab; optab umul_widen_optab; optab sdiv_optab; @@ -383,7 +385,9 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) Also try to make the last operand a constant. */ if (GET_RTX_CLASS (binoptab->code) == 'c' || binoptab == smul_widen_optab - || binoptab == umul_widen_optab) + || binoptab == umul_widen_optab + || binoptab == smul_highpart_optab + || binoptab == umul_highpart_optab) { commutative_op = 1; @@ -1484,6 +1488,9 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) op1x = convert_to_mode (word_mode, op1, 1); } + if (GET_MODE (op0) != mode) + op0 = convert_to_mode (mode, op0, unsignedp); + /* Pass 1 for NO_QUEUE so we don't lose any increments if the libcall is cse'd or moved. */ value = emit_library_call_value (binoptab->handlers[(int) mode].libfunc, @@ -3727,6 +3734,8 @@ init_optabs () add_optab = init_optab (PLUS); sub_optab = init_optab (MINUS); smul_optab = init_optab (MULT); + smul_highpart_optab = init_optab (UNKNOWN); + umul_highpart_optab = init_optab (UNKNOWN); smul_widen_optab = init_optab (UNKNOWN); umul_widen_optab = init_optab (UNKNOWN); sdiv_optab = init_optab (DIV); |