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