mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-10 09:26:15 +00:00
144 lines
3.4 KiB
C
144 lines
3.4 KiB
C
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <assert.h>
|
|
|
|
#define JZ_NEXT ".byte 0x74,0x00" /* jz the-next-insn */
|
|
|
|
int main ( void )
|
|
{
|
|
char* junk = malloc(48);
|
|
assert(junk);
|
|
|
|
|
|
/* --- INTEGER --- */
|
|
|
|
printf("\nComplain int64\n");
|
|
__asm__ __volatile__(
|
|
"movq 0(%0), %%rax\n\t"
|
|
"movq 8(%0), %%r8\n\t"
|
|
"xorq %%r8, %%rax\n\t"
|
|
JZ_NEXT
|
|
: : "r"(junk) : "r8", "rax", "cc"
|
|
);
|
|
|
|
printf("\nNo complain int64\n");
|
|
__asm__ __volatile__(
|
|
"movq 0(%0), %%rax\n\t"
|
|
"movq 8(%0), %%r8\n\t"
|
|
"xorq %%rax, %%rax\n\t"
|
|
JZ_NEXT
|
|
: : "r"(junk) : "r8", "rax", "cc"
|
|
);
|
|
|
|
|
|
/* --- MMX --- */
|
|
|
|
printf("\nComplain mmx\n");
|
|
__asm__ __volatile__(
|
|
"emms\n\t"
|
|
"movq 0(%0), %%mm0\n\t"
|
|
"movq 8(%0), %%mm7\n\t"
|
|
"pxor %%mm7, %%mm0\n\t"
|
|
"movq %%mm0, 16(%0)\n\t"
|
|
"cmpq $0,16(%0)\n\t"
|
|
JZ_NEXT
|
|
: : "r"(junk) : "mm7", "mm0", "cc", "memory"
|
|
);
|
|
|
|
printf("\nNo complain mmx\n");
|
|
__asm__ __volatile__(
|
|
"emms\n\t"
|
|
"movq 0(%0), %%mm0\n\t"
|
|
"movq 8(%0), %%mm7\n\t"
|
|
"pxor %%mm0, %%mm0\n\t"
|
|
"movq %%mm0, 16(%0)\n\t"
|
|
"cmpq $0,16(%0)\n\t"
|
|
JZ_NEXT
|
|
: : "r"(junk) : "mm7", "mm0", "cc", "memory"
|
|
);
|
|
|
|
|
|
/* --- SSE1 --- */
|
|
|
|
printf("\nComplain sse xorps\n");
|
|
__asm__ __volatile__(
|
|
"movups 0(%0), %%xmm0\n\t"
|
|
"movups 16(%0), %%xmm8\n\t"
|
|
"xorps %%xmm8, %%xmm0\n\t"
|
|
"movups %%xmm0, 32(%0)\n\t"
|
|
"movq 32(%0), %%rax\n\t"
|
|
"addq 40(%0), %%rax\n\t"
|
|
JZ_NEXT
|
|
: : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
|
|
);
|
|
|
|
printf("\nNo complain sse xorps\n");
|
|
__asm__ __volatile__(
|
|
"movups 0(%0), %%xmm0\n\t"
|
|
"movups 16(%0), %%xmm8\n\t"
|
|
"xorps %%xmm0, %%xmm0\n\t"
|
|
"movups %%xmm0, 32(%0)\n\t"
|
|
"movq 32(%0), %%rax\n\t"
|
|
"addq 40(%0), %%rax\n\t"
|
|
JZ_NEXT
|
|
: : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
|
|
);
|
|
|
|
|
|
/* --- SSE2 --- */
|
|
|
|
printf("\nComplain sse2 pxor\n");
|
|
__asm__ __volatile__(
|
|
"movups 0(%0), %%xmm0\n\t"
|
|
"movups 16(%0), %%xmm8\n\t"
|
|
"pxor %%xmm8, %%xmm0\n\t"
|
|
"movups %%xmm0, 32(%0)\n\t"
|
|
"movq 32(%0), %%rax\n\t"
|
|
"addq 40(%0), %%rax\n\t"
|
|
JZ_NEXT
|
|
: : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
|
|
);
|
|
|
|
printf("\nNo complain sse2 pxor\n");
|
|
__asm__ __volatile__(
|
|
"movups 0(%0), %%xmm0\n\t"
|
|
"movups 16(%0), %%xmm8\n\t"
|
|
"pxor %%xmm0, %%xmm0\n\t"
|
|
"movups %%xmm0, 32(%0)\n\t"
|
|
"movq 32(%0), %%rax\n\t"
|
|
"addq 40(%0), %%rax\n\t"
|
|
JZ_NEXT
|
|
: : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
|
|
);
|
|
|
|
|
|
printf("\nComplain sse2 xorpd\n");
|
|
__asm__ __volatile__(
|
|
"movups 0(%0), %%xmm0\n\t"
|
|
"movups 16(%0), %%xmm8\n\t"
|
|
"xorpd %%xmm8, %%xmm0\n\t"
|
|
"movups %%xmm0, 32(%0)\n\t"
|
|
"movq 32(%0), %%rax\n\t"
|
|
"addq 40(%0), %%rax\n\t"
|
|
JZ_NEXT
|
|
: : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
|
|
);
|
|
|
|
printf("\nNo complain sse2 xorpd\n");
|
|
__asm__ __volatile__(
|
|
"movups 0(%0), %%xmm0\n\t"
|
|
"movups 16(%0), %%xmm8\n\t"
|
|
"xorpd %%xmm0, %%xmm0\n\t"
|
|
"movups %%xmm0, 32(%0)\n\t"
|
|
"movq 32(%0), %%rax\n\t"
|
|
"addq 40(%0), %%rax\n\t"
|
|
JZ_NEXT
|
|
: : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
|
|
);
|
|
|
|
|
|
free(junk);
|
|
return 0;
|
|
}
|