]>
git.proxmox.com Git - qemu.git/blob - tests/test-i386-ssse3.c
1 /* See if various MMX/SSE SSSE3 instructions give expected results */
5 int main(int argc
, char *argv
[]) {
7 const char ehlo
[8] = "EHLO ";
8 uint64_t mask
= 0x8080800302020001;
10 uint64_t a
= 0x0000000000090007;
11 uint64_t b
= 0x0000000000000000;
13 const char c
[16] = "LLOaaaaaaaaaaaaa";
14 const char d
[16] = "aaaaaaaaaaaaaaHE";
16 /* pshufb mm1/xmm1, mm2/xmm2 */
17 asm volatile ("movq (%0), %%mm0" : : "r" (ehlo
) : "mm0", "mm1");
18 asm volatile ("movq %0, %%mm1" : : "m" (mask
));
19 asm volatile ("pshufb %mm1, %mm0");
20 asm volatile ("movq %%mm0, %0" : "=m" (hello
));
21 printf("%s\n", hello
);
23 /* pshufb mm1/xmm1, m64/m128 */
24 asm volatile ("movq (%0), %%mm0" : : "r" (ehlo
) : "mm0");
25 asm volatile ("pshufb %0, %%mm0" : : "m" (mask
));
26 asm volatile ("movq %%mm0, %0" : "=m" (hello
));
27 printf("%s\n", hello
);
29 /* psubsw mm1/xmm1, m64/m128 */
30 asm volatile ("movq %0, %%mm0" : : "r" (a
) : "mm0");
31 asm volatile ("phsubsw %0, %%mm0" : : "m" (b
));
32 asm volatile ("movq %%mm0, %0" : "=m" (a
));
33 printf("%i - %i = %i\n", 9, 7, -(int16_t) a
);
35 /* palignr mm1/xmm1, m64/m128, imm8 */
36 asm volatile ("movdqa (%0), %%xmm0" : : "r" (c
) : "xmm0");
37 asm volatile ("palignr $14, (%0), %%xmm0" : : "r" (d
));
38 asm volatile ("movdqa %%xmm0, (%0)" : : "r" (hello
));
39 printf("%5.5s\n", hello
);