1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdlib.h> 4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "tests/asm.h" 5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "tests/malloc.h" 6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <string.h> 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownconst unsigned int vec0[4] 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown = { 0x12345678, 0x11223344, 0x55667788, 0x87654321 }; 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownconst unsigned int vec1[4] 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown = { 0xABCDEF01, 0xAABBCCDD, 0xEEFF0011, 0x10FEDCBA }; 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovconst unsigned int vecZ[4] 15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov = { 0, 0, 0, 0 }; 16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov__attribute__((noinline)) 18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid do_fxsave ( void* p, int rexw ) { 19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (rexw) { 20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("rex64/fxsave (%0)" : : "r" (p) : "memory" ); 21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } else { 22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("fxsave (%0)" : : "r" (p) : "memory" ); 23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov__attribute__((noinline)) 27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid do_fxrstor ( void* p, int rexw ) { 28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (rexw) { 29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("rex64/fxrstor (%0)" : : "r" (p) : "memory" ); 30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } else { 31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("fxrstor (%0)" : : "r" (p) : "memory" ); 32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid do_zeroise ( void ) 36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("finit"); 38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__( 39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "fldz\n\t" 40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "fldz\n\t" 41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "fldz\n\t" 42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "fldz\n\t" 43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "fldz\n\t" 44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "fldz\n\t" 45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "fldz\n\t" 46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "fldz\n\t" 47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "finit\n"); 48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#ifndef VGP_amd64_darwin 49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm0"); 50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm1"); 51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm2"); 52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm3"); 53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm4"); 54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm5"); 55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm6"); 56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm7"); 57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm8"); 58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm9"); 59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm10"); 60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm11"); 61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm12"); 62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm13"); 63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm14"); 64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) ", %xmm15"); 65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else 66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm0"); 67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm1"); 68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm2"); 69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm3"); 70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm4"); 71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm5"); 72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm6"); 73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm7"); 74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm8"); 75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm9"); 76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm10"); 77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm11"); 78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm12"); 79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm13"); 80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm14"); 81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__("movups " VG_SYM(vecZ) "(%rip), %xmm15"); 82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif 83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov asm __volatile__( 84b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "pushq $0\n\t" 85b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "ldmxcsr 0(%rsp)\n\t" 86b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "addq $8,%rsp\n"); 87b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 88b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* set up the FP and SSE state, and then dump it. */ 90b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid do_setup_then_fxsave ( void* p, int rexw ) 91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("finit"); 93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("fldpi"); 94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("fld1"); 95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("fldln2"); 96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("fldlg2"); 97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("fld %st(3)"); 98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("fld %st(3)"); 99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("fld1"); 100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movups (%0), %%xmm0" : : "r"(&vec0[0]) : "xmm0" ); 101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movups (%0), %%xmm1" : : "r"(&vec1[0]) : "xmm1" ); 102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("xorps %xmm2, %xmm2"); 103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm0, %xmm3"); 104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm1, %xmm4"); 105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm2, %xmm5"); 106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm0, %xmm6"); 107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm1, %xmm7"); 108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm1, %xmm8"); 109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm2, %xmm9"); 110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm0, %xmm10"); 111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm1, %xmm11"); 112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm1, %xmm12"); 113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm2, %xmm13"); 114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm0, %xmm14"); 115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm __volatile__("movaps %xmm1, %xmm15"); 116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov do_fxsave(p, rexw); 117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint isFPLsbs ( int i ) 120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int q; 122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown q = 32; if (i == q || i == q+1) return 1; 123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown q = 48; if (i == q || i == q+1) return 1; 124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown q = 64; if (i == q || i == q+1) return 1; 125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown q = 80; if (i == q || i == q+1) return 1; 126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown q = 96; if (i == q || i == q+1) return 1; 127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown q = 112; if (i == q || i == q+1) return 1; 128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown q = 128; if (i == q || i == q+1) return 1; 129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown q = 144; if (i == q || i == q+1) return 1; 130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid show ( unsigned char* buf, int xx ) 134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov int i; 136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov for (i = 0; i < 512; i++) { 137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if ((i % 16) == 0) 138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%3d ", i); 139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (xx && isFPLsbs(i)) 140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("xx "); 141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown else 142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%02x ", buf[i]); 143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (i > 0 && ((i % 16) == 15)) 144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint main ( int argc, char** argv ) 150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov unsigned char* buf1 = memalign16(512); 152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov unsigned char* buf2 = memalign16(512); 153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov unsigned char* buf3 = memalign16(512); 154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov int xx = argc > 1; 155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("Re-run with any arg to suppress least-significant\n" 156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov " 16 bits of FP numbers\n"); 157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("\n-------- FXSAVE non-64 (REX.W == 0) --------\n"); 159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov memset(buf1, 0x55, 512); 161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov memset(buf2, 0x55, 512); 162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov memset(buf3, 0x55, 512); 163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* Load up x87/xmm state and dump it. */ 165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov do_setup_then_fxsave(buf1, 0); 166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("\nBEFORE\n"); 167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov show(buf1, xx); 168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* Zeroise x87/xmm state and dump it, to show that the 170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov regs have been cleared out. */ 171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov do_zeroise(); 172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov do_fxsave(buf2, 0); 173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("\nZEROED\n"); 174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov show(buf2, xx); 175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* Reload x87/xmm state from buf1 and dump it in buf3. */ 177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov do_fxrstor(buf1, 0); 178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov do_fxsave(buf3, 0); 179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("\nRESTORED\n"); 180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov show(buf3, xx); 181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("\n-------- FXSAVE 64 (REX.W == 1) --------\n\n"); 183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov memset(buf1, 0x55, 512); 185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov memset(buf2, 0x55, 512); 186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov memset(buf3, 0x55, 512); 187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* Load up x87/xmm state and dump it. */ 189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov do_setup_then_fxsave(buf1, 1); 190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("\nBEFORE\n"); 191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov show(buf1, xx); 192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* Zeroise x87/xmm state and dump it, to show that the 194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov regs have been cleared out. */ 195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov do_zeroise(); 196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov do_fxsave(buf2, 1); 197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("\nZEROED\n"); 198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov show(buf2, xx); 199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* Reload x87/xmm state from buf1 and dump it in buf3. */ 201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov do_fxrstor(buf1, 1); 202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov do_fxsave(buf3, 1); 203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("\nRESTORED\n"); 204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov show(buf3, xx); 205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov free(buf1); free(buf2); free(buf3); 208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 211