summaryrefslogtreecommitdiff
path: root/gcc/config/i386
diff options
context:
space:
mode:
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2001-09-25 14:59:36 +0000
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2001-09-25 14:59:36 +0000
commit065ea2c9307bb8e11efefa2ff5a0f75b76c4249a (patch)
tree585c52b1c88a2fc3df2012d9fd2dc22c6311b653 /gcc/config/i386
parent7dcedb89a94e40bd26d947439e60d83a9f61402d (diff)
downloadgcc-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.c17
-rw-r--r--gcc/config/i386/i386.md12
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"