• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <assert.h>
5 
6 #define JZ_NEXT ".byte 0x74,0x00"  /* jz the-next-insn */
7 
main(void)8 int main ( void )
9 {
10    char* junk = malloc(48);
11    assert(junk);
12 
13 
14    /* --- INTEGER --- */
15 
16    printf("\nComplain int32\n");
17    __asm__ __volatile__(
18       "movl   0(%0), %%eax\n\t"
19       "movl   8(%0), %%edi\n\t"
20       "xorl   %%edi, %%eax\n\t"
21       JZ_NEXT
22       : : "r"(junk) : "edi", "eax", "cc"
23    );
24 
25    printf("\nNo complain int32\n");
26    __asm__ __volatile__(
27       "movl   0(%0), %%eax\n\t"
28       "movl   8(%0), %%edi\n\t"
29       "xorl   %%eax, %%eax\n\t"
30       JZ_NEXT
31       : : "r"(junk) : "edi", "eax", "cc"
32    );
33 
34 
35    /* --- MMX --- */
36 
37    printf("\nComplain mmx\n");
38    __asm__ __volatile__(
39       "emms\n\t"
40       "movq   0(%0), %%mm0\n\t"
41       "movq   8(%0), %%mm7\n\t"
42       "pxor   %%mm7, %%mm0\n\t"
43       "movq   %%mm0, 16(%0)\n\t"
44       "movl   16(%0), %%esi\n\t"
45       "addl   20(%0), %%esi\n\t"
46       JZ_NEXT
47       : : "r"(junk) : "esi", "mm7", "mm0", "cc", "memory"
48    );
49 
50    printf("\nNo complain mmx\n");
51    __asm__ __volatile__(
52       "emms\n\t"
53       "movq   0(%0), %%mm0\n\t"
54       "movq   8(%0), %%mm7\n\t"
55       "pxor   %%mm0, %%mm0\n\t"
56       "movq   %%mm0, 16(%0)\n\t"
57       "movl   16(%0), %%esi\n\t"
58       "addl   20(%0), %%esi\n\t"
59       JZ_NEXT
60       : : "r"(junk) : "esi", "mm7", "mm0", "cc", "memory"
61    );
62 
63 
64    /* --- SSE1 --- */
65 
66    printf("\nComplain sse xorps\n");
67    __asm__ __volatile__(
68       "movups   0(%0),  %%xmm0\n\t"
69       "movups   16(%0), %%xmm7\n\t"
70       "xorps    %%xmm7, %%xmm0\n\t"
71       "movups   %%xmm0, 32(%0)\n\t"
72       "movl 32(%0), %%esi\n\t"
73       "addl 36(%0), %%esi\n\t"
74       "addl 40(%0), %%esi\n\t"
75       "addl 44(%0), %%esi\n\t"
76       JZ_NEXT
77       : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
78    );
79 
80    printf("\nNo complain sse xorps\n");
81    __asm__ __volatile__(
82       "movups   0(%0),  %%xmm0\n\t"
83       "movups   16(%0), %%xmm7\n\t"
84       "xorps    %%xmm0, %%xmm0\n\t"
85       "movups   %%xmm0, 32(%0)\n\t"
86       "movl 32(%0), %%esi\n\t"
87       "addl 36(%0), %%esi\n\t"
88       "addl 40(%0), %%esi\n\t"
89       "addl 44(%0), %%esi\n\t"
90       JZ_NEXT
91       : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
92    );
93 
94 
95    /* --- SSE2 --- */
96 #if 0
97    printf("\nComplain sse2 pxor\n");
98    __asm__ __volatile__(
99       "movups   0(%0),  %%xmm0\n\t"
100       "movups   16(%0), %%xmm7\n\t"
101       "pxor     %%xmm7, %%xmm0\n\t"
102       "movups   %%xmm0, 32(%0)\n\t"
103       "movl 32(%0), %%esi\n\t"
104       "addl 36(%0), %%esi\n\t"
105       "addl 40(%0), %%esi\n\t"
106       "addl 44(%0), %%esi\n\t"
107       JZ_NEXT
108       : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
109    );
110 
111    printf("\nNo complain sse2 pxor\n");
112    __asm__ __volatile__(
113       "movups   0(%0),  %%xmm0\n\t"
114       "movups   16(%0), %%xmm7\n\t"
115       "pxor     %%xmm0, %%xmm0\n\t"
116       "movups   %%xmm0, 32(%0)\n\t"
117       "movl 32(%0), %%esi\n\t"
118       "addl 36(%0), %%esi\n\t"
119       "addl 40(%0), %%esi\n\t"
120       "addl 44(%0), %%esi\n\t"
121       JZ_NEXT
122       : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
123    );
124 
125 
126    printf("\nComplain sse2 xorpd\n");
127    __asm__ __volatile__(
128       "movups   0(%0),  %%xmm0\n\t"
129       "movups   16(%0), %%xmm7\n\t"
130       "xorpd    %%xmm7, %%xmm0\n\t"
131       "movups   %%xmm0, 32(%0)\n\t"
132       "movl 32(%0), %%esi\n\t"
133       "addl 36(%0), %%esi\n\t"
134       "addl 40(%0), %%esi\n\t"
135       "addl 44(%0), %%esi\n\t"
136       JZ_NEXT
137       : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
138    );
139 
140    printf("\nNo complain sse2 xorpd\n");
141    __asm__ __volatile__(
142       "movups   0(%0),  %%xmm0\n\t"
143       "movups   16(%0), %%xmm7\n\t"
144       "xorpd    %%xmm0, %%xmm0\n\t"
145       "movups   %%xmm0, 32(%0)\n\t"
146       "movl 32(%0), %%esi\n\t"
147       "addl 36(%0), %%esi\n\t"
148       "addl 40(%0), %%esi\n\t"
149       "addl 44(%0), %%esi\n\t"
150       JZ_NEXT
151       : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
152    );
153 #endif
154 
155    free(junk);
156    return 0;
157 }
158