1733 |
SSE_OP2(op);\ |
SSE_OP2(op);\ |
1734 |
} |
} |
1735 |
|
|
1736 |
|
#define SHUF_OP(op, ib)\ |
1737 |
|
{\ |
1738 |
|
int i;\ |
1739 |
|
a.q[0] = test_values[0][0];\ |
1740 |
|
a.q[1] = test_values[0][1];\ |
1741 |
|
b.q[0] = test_values[1][0];\ |
1742 |
|
b.q[1] = test_values[1][1];\ |
1743 |
|
asm volatile (#op " $" #ib ", %2, %0" : "=x" (r.dq) : "0" (a.dq), "x" (b.dq));\ |
1744 |
|
printf("%-9s: a=%016llx%016llx b=%016llx%016llx ib=%02x r=%016llx%016llx\n",\ |
1745 |
|
#op,\ |
1746 |
|
a.q[1], a.q[0],\ |
1747 |
|
b.q[1], b.q[0],\ |
1748 |
|
ib,\ |
1749 |
|
r.q[1], r.q[0]);\ |
1750 |
|
} |
1751 |
|
|
1752 |
#define PSHUF_OP(op, ib)\ |
#define PSHUF_OP(op, ib)\ |
1753 |
{\ |
{\ |
1754 |
int i;\ |
int i;\ |
2025 |
asm volatile ("pmovmskb %1, %0" : "=r" (r.l[0]) : "x" (a.dq)); |
asm volatile ("pmovmskb %1, %0" : "=r" (r.l[0]) : "x" (a.dq)); |
2026 |
printf("%-9s: r=%08x\n", "pmovmskb", r.l[0]); |
printf("%-9s: r=%08x\n", "pmovmskb", r.l[0]); |
2027 |
|
|
2028 |
|
{ |
2029 |
|
r.q[0] = -1; |
2030 |
|
r.q[1] = -1; |
2031 |
|
|
2032 |
|
a.q[0] = test_values[0][0]; |
2033 |
|
a.q[1] = test_values[0][1]; |
2034 |
|
b.q[0] = test_values[1][0]; |
2035 |
|
b.q[1] = test_values[1][1]; |
2036 |
|
asm volatile("maskmovq %1, %0" : |
2037 |
|
: "y" (a.q[0]), "y" (b.q[0]), "D" (&r) |
2038 |
|
: "memory"); |
2039 |
|
printf("%-9s: r=%016llx a=%016llx b=%016llx\n", |
2040 |
|
"maskmov", |
2041 |
|
r.q[0], |
2042 |
|
a.q[0], |
2043 |
|
b.q[0]); |
2044 |
|
asm volatile("maskmovdqu %1, %0" : |
2045 |
|
: "x" (a.dq), "x" (b.dq), "D" (&r) |
2046 |
|
: "memory"); |
2047 |
|
printf("%-9s: r=%016llx%016llx a=%016llx%016llx b=%016llx%016llx\n", |
2048 |
|
"maskmov", |
2049 |
|
r.q[1], r.q[0], |
2050 |
|
a.q[1], a.q[0], |
2051 |
|
b.q[1], b.q[0]); |
2052 |
|
} |
2053 |
|
|
2054 |
asm volatile ("emms"); |
asm volatile ("emms"); |
2055 |
|
|
2056 |
SSE_OP2(punpcklqdq); |
SSE_OP2(punpcklqdq); |
2069 |
SSE_OP2(unpckhps); |
SSE_OP2(unpckhps); |
2070 |
SSE_OP2(unpckhpd); |
SSE_OP2(unpckhpd); |
2071 |
|
|
2072 |
PSHUF_OP(shufps, 0x78); |
SHUF_OP(shufps, 0x78); |
2073 |
PSHUF_OP(shufpd, 0x02); |
SHUF_OP(shufpd, 0x02); |
2074 |
|
|
2075 |
PSHUF_OP(pshufd, 0x78); |
PSHUF_OP(pshufd, 0x78); |
2076 |
PSHUF_OP(pshuflw, 0x78); |
PSHUF_OP(pshuflw, 0x78); |