Revision d52cf7a6
b/target-i386/ops_sse.h | ||
---|---|---|
528 | 528 |
s = (Reg *)((char *)env + PARAM2); |
529 | 529 |
for(i = 0; i < (8 << SHIFT); i++) { |
530 | 530 |
if (s->B(i) & 0x80) |
531 |
stb(A0, d->B(i)); |
|
531 |
stb(A0 + i, d->B(i));
|
|
532 | 532 |
} |
533 | 533 |
} |
534 | 534 |
|
... | ... | |
565 | 565 |
*d = r; |
566 | 566 |
} |
567 | 567 |
#else |
568 |
void OPPROTO op_shufps(void) |
|
569 |
{ |
|
570 |
Reg r, *d, *s; |
|
571 |
int order; |
|
572 |
d = (Reg *)((char *)env + PARAM1); |
|
573 |
s = (Reg *)((char *)env + PARAM2); |
|
574 |
order = PARAM3; |
|
575 |
r.L(0) = d->L(order & 3); |
|
576 |
r.L(1) = d->L((order >> 2) & 3); |
|
577 |
r.L(2) = s->L((order >> 4) & 3); |
|
578 |
r.L(3) = s->L((order >> 6) & 3); |
|
579 |
*d = r; |
|
580 |
} |
|
581 |
|
|
568 | 582 |
void OPPROTO op_shufpd(void) |
569 | 583 |
{ |
570 | 584 |
Reg r, *d, *s; |
... | ... | |
572 | 586 |
d = (Reg *)((char *)env + PARAM1); |
573 | 587 |
s = (Reg *)((char *)env + PARAM2); |
574 | 588 |
order = PARAM3; |
575 |
r.Q(0) = s->Q(order & 1);
|
|
589 |
r.Q(0) = d->Q(order & 1);
|
|
576 | 590 |
r.Q(1) = s->Q((order >> 1) & 1); |
577 | 591 |
*d = r; |
578 | 592 |
} |
b/target-i386/translate.c | ||
---|---|---|
2292 | 2292 |
[0x5f] = SSE_FOP(max), |
2293 | 2293 |
|
2294 | 2294 |
[0xc2] = SSE_FOP(cmpeq), |
2295 |
[0xc6] = { (GenOpFunc2 *)gen_op_pshufd_xmm, (GenOpFunc2 *)gen_op_shufpd },
|
|
2295 |
[0xc6] = { (GenOpFunc2 *)gen_op_shufps, (GenOpFunc2 *)gen_op_shufpd },
|
|
2296 | 2296 |
|
2297 | 2297 |
/* MMX ops and their SSE extensions */ |
2298 | 2298 |
[0x60] = MMX_OP2(punpcklbw), |
Also available in: Unified diff