]> Git Repo - qemu.git/commitdiff
sse fix
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 16 Jan 2005 01:07:28 +0000 (01:07 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 16 Jan 2005 01:07:28 +0000 (01:07 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1224 c046a42c-6fe2-441c-8c8c-71466251a162

target-i386/ops_sse.h
target-i386/translate.c

index 39c90d0c29f6a32c822cf7f0914f4a2542b07d26..2ba2db3a7b5736299e820519a6fb24d161f034fd 100644 (file)
@@ -528,7 +528,7 @@ void OPPROTO glue(op_maskmov, SUFFIX) (void)
     s = (Reg *)((char *)env + PARAM2);
     for(i = 0; i < (8 << SHIFT); i++) {
         if (s->B(i) & 0x80)
-            stb(A0, d->B(i));
+            stb(A0 + i, d->B(i));
     }
 }
 
@@ -565,6 +565,20 @@ void OPPROTO glue(op_pshufw, SUFFIX) (void)
     *d = r;
 }
 #else
+void OPPROTO op_shufps(void)
+{
+    Reg r, *d, *s;
+    int order;
+    d = (Reg *)((char *)env + PARAM1);
+    s = (Reg *)((char *)env + PARAM2);
+    order = PARAM3;
+    r.L(0) = d->L(order & 3);
+    r.L(1) = d->L((order >> 2) & 3);
+    r.L(2) = s->L((order >> 4) & 3);
+    r.L(3) = s->L((order >> 6) & 3);
+    *d = r;
+}
+
 void OPPROTO op_shufpd(void)
 {
     Reg r, *d, *s;
@@ -572,7 +586,7 @@ void OPPROTO op_shufpd(void)
     d = (Reg *)((char *)env + PARAM1);
     s = (Reg *)((char *)env + PARAM2);
     order = PARAM3;
-    r.Q(0) = s->Q(order & 1);
+    r.Q(0) = d->Q(order & 1);
     r.Q(1) = s->Q((order >> 1) & 1);
     *d = r;
 }
index e548387ebd103bc1b1e6483d7c97aa5609df44a1..17ce6fa6032bfb48a91b3b0b0703f4494a176260 100644 (file)
@@ -2292,7 +2292,7 @@ static GenOpFunc2 *sse_op_table1[256][4] = {
     [0x5f] = SSE_FOP(max),
 
     [0xc2] = SSE_FOP(cmpeq),
-    [0xc6] = { (GenOpFunc2 *)gen_op_pshufd_xmm, (GenOpFunc2 *)gen_op_shufpd },
+    [0xc6] = { (GenOpFunc2 *)gen_op_shufps, (GenOpFunc2 *)gen_op_shufpd },
 
     /* MMX ops and their SSE extensions */
     [0x60] = MMX_OP2(punpcklbw),
This page took 0.039297 seconds and 4 git commands to generate.