diff options
author | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-25 14:59:36 +0000 |
---|---|---|
committer | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-25 14:59:36 +0000 |
commit | 065ea2c9307bb8e11efefa2ff5a0f75b76c4249a (patch) | |
tree | 585c52b1c88a2fc3df2012d9fd2dc22c6311b653 /gcc/config/i386 | |
parent | 7dcedb89a94e40bd26d947439e60d83a9f61402d (diff) | |
download | gcc-065ea2c9307bb8e11efefa2ff5a0f75b76c4249a.tar.gz |
SSE/MMX builtins bugfixes
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45806 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/i386')
-rw-r--r-- | gcc/config/i386/i386.c | 17 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 12 |
2 files changed, 14 insertions, 15 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 1dfa799d05e..76370067b1c 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -10416,7 +10416,7 @@ ix86_init_mmx_sse_builtins () tree_cons (NULL_TREE, integer_type_node, endlink)); tree v4sf_ftype_v4sf_int - = build_function_type (integer_type_node, + = build_function_type (V4SF_type_node, tree_cons (NULL_TREE, V4SF_type_node, tree_cons (NULL_TREE, integer_type_node, endlink))); @@ -10915,15 +10915,15 @@ ix86_expand_sse_compare (d, arglist, target) hardware. */ if (d->flag) { - target = gen_reg_rtx (tmode); - emit_move_insn (target, op1); + rtx tmp = gen_reg_rtx (mode1); + emit_move_insn (tmp, op1); op1 = op0; - op0 = target; - comparison = swap_condition (comparison); + op0 = tmp; } - else if (! target - || GET_MODE (target) != tmode - || ! (*insn_data[d->icode].operand[0].predicate) (target, tmode)) + + if (! target + || GET_MODE (target) != tmode + || ! (*insn_data[d->icode].operand[0].predicate) (target, tmode)) target = gen_reg_rtx (tmode); if (! (*insn_data[d->icode].operand[1].predicate) (op0, mode0)) @@ -10969,7 +10969,6 @@ ix86_expand_sse_comi (d, arglist, target) rtx tmp = op1; op1 = op0; op0 = tmp; - comparison = swap_condition (comparison); } target = gen_reg_rtx (SImode); diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index ef5d0fc86de..8021f39b33f 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -18239,7 +18239,7 @@ (match_operand:V4SF 1 "register_operand" "x") (parallel [(const_int 0)]))]))] "TARGET_SSE" - "comiss\t{%2, %0|%0, %2}" + "comiss\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_ucomi" @@ -18252,7 +18252,7 @@ (match_operand:V4SF 1 "register_operand" "x") (parallel [(const_int 0)]))]))] "TARGET_SSE" - "ucomiss\t{%2, %0|%0, %2}" + "ucomiss\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) @@ -18266,7 +18266,7 @@ (const_int 0) (const_int 3) (const_int 1)])) - (vec_select:V8QI (match_operand:V8QI 2 "register_operand" "x") + (vec_select:V4SF (match_operand:V4SF 2 "register_operand" "x") (parallel [(const_int 0) (const_int 2) (const_int 1) @@ -18284,7 +18284,7 @@ (const_int 2) (const_int 1) (const_int 3)])) - (vec_select:V8QI (match_operand:V8QI 2 "register_operand" "x") + (vec_select:V4SF (match_operand:V4SF 2 "register_operand" "x") (parallel [(const_int 2) (const_int 0) (const_int 3) @@ -18377,7 +18377,7 @@ [(set_attr "type" "sse")]) (define_insn "cvtss2si" - [(set (match_operand:SI 0 "register_operand" "=y") + [(set (match_operand:SI 0 "register_operand" "=r") (vec_select:SI (fix:V4SI (match_operand:V4SF 1 "register_operand" "xm")) (parallel [(const_int 0)])))] "TARGET_SSE" @@ -18385,7 +18385,7 @@ [(set_attr "type" "sse")]) (define_insn "cvttss2si" - [(set (match_operand:SI 0 "register_operand" "=y") + [(set (match_operand:SI 0 "register_operand" "=r") (vec_select:SI (unspec:V4SI [(match_operand:V4SF 1 "register_operand" "xm")] 30) (parallel [(const_int 0)])))] "TARGET_SSE" |