1*87aa9c9eSJonas Devlieghere #include <cstdint>
2*87aa9c9eSJonas Devlieghere
main()3*87aa9c9eSJonas Devlieghere int main() {
4*87aa9c9eSJonas Devlieghere constexpr uint32_t eax = 0x05060708;
5*87aa9c9eSJonas Devlieghere constexpr uint32_t ebx = 0x15161718;
6*87aa9c9eSJonas Devlieghere constexpr uint32_t ecx = 0x25262728;
7*87aa9c9eSJonas Devlieghere constexpr uint32_t edx = 0x35363738;
8*87aa9c9eSJonas Devlieghere constexpr uint32_t esp = 0x45464748;
9*87aa9c9eSJonas Devlieghere constexpr uint32_t ebp = 0x55565758;
10*87aa9c9eSJonas Devlieghere constexpr uint32_t esi = 0x65666768;
11*87aa9c9eSJonas Devlieghere constexpr uint32_t edi = 0x75767778;
12*87aa9c9eSJonas Devlieghere
13*87aa9c9eSJonas Devlieghere asm volatile(
14*87aa9c9eSJonas Devlieghere // save esp & ebp
15*87aa9c9eSJonas Devlieghere "movd %%esp, %%mm0\n\t"
16*87aa9c9eSJonas Devlieghere "movd %%ebp, %%mm1\n\t"
17*87aa9c9eSJonas Devlieghere "\n\t"
18*87aa9c9eSJonas Devlieghere "movl %4, %%esp\n\t"
19*87aa9c9eSJonas Devlieghere "movl %5, %%ebp\n\t"
20*87aa9c9eSJonas Devlieghere "\n\t"
21*87aa9c9eSJonas Devlieghere "int3\n\t"
22*87aa9c9eSJonas Devlieghere "\n\t"
23*87aa9c9eSJonas Devlieghere // restore esp & ebp
24*87aa9c9eSJonas Devlieghere "movd %%mm0, %%esp\n\t"
25*87aa9c9eSJonas Devlieghere "movd %%mm1, %%ebp\n\t"
26*87aa9c9eSJonas Devlieghere :
27*87aa9c9eSJonas Devlieghere : "a"(eax), "b"(ebx), "c"(ecx), "d"(edx), "i"(esp), "i"(ebp), "S"(esi),
28*87aa9c9eSJonas Devlieghere "D"(edi)
29*87aa9c9eSJonas Devlieghere : "%mm0", "%mm1"
30*87aa9c9eSJonas Devlieghere );
31*87aa9c9eSJonas Devlieghere
32*87aa9c9eSJonas Devlieghere return 0;
33*87aa9c9eSJonas Devlieghere }
34