1 #include <stdarg.h>
2 
3 #define WRAP(x) typeof(x) emul_##x
4 #include "x86-emulate.h"
5 
emul_fwrite(const void * src,size_t sz,size_t n,FILE * f)6 size_t emul_fwrite(const void *src, size_t sz, size_t n, FILE *f)
7 {
8     emul_save_fpu_state();
9     sz = fwrite(src, sz, n, f);
10     emul_restore_fpu_state();
11 
12     return sz;
13 }
14 
emul_memcmp(const void * p1,const void * p2,size_t sz)15 int emul_memcmp(const void *p1, const void *p2, size_t sz)
16 {
17     int rc;
18 
19     emul_save_fpu_state();
20     rc = memcmp(p1, p2, sz);
21     emul_restore_fpu_state();
22 
23     return rc;
24 }
25 
emul_memcpy(void * dst,const void * src,size_t sz)26 void *emul_memcpy(void *dst, const void *src, size_t sz)
27 {
28     emul_save_fpu_state();
29     memcpy(dst, src, sz);
30     emul_restore_fpu_state();
31 
32     return dst;
33 }
34 
emul_memset(void * dst,int c,size_t sz)35 void *emul_memset(void *dst, int c, size_t sz)
36 {
37     emul_save_fpu_state();
38     memset(dst, c, sz);
39     emul_restore_fpu_state();
40 
41     return dst;
42 }
43 
emul_printf(const char * fmt,...)44 int emul_printf(const char *fmt, ...)
45 {
46     va_list varg;
47     int rc;
48 
49     emul_save_fpu_state();
50     va_start(varg, fmt);
51     rc = vprintf(fmt, varg);
52     va_end(varg);
53     emul_restore_fpu_state();
54 
55     return rc;
56 }
57 
emul_putchar(int c)58 int emul_putchar(int c)
59 {
60     int rc;
61 
62     emul_save_fpu_state();
63     rc = putchar(c);
64     emul_restore_fpu_state();
65 
66     return rc;
67 }
68 
emul_puts(const char * str)69 int emul_puts(const char *str)
70 {
71     int rc;
72 
73     emul_save_fpu_state();
74     rc = puts(str);
75     emul_restore_fpu_state();
76 
77     return rc;
78 }
79