MMX/SSE support
[qemu] / target-i386 / ops_mem.h
1 void OPPROTO glue(glue(op_ldub, MEMSUFFIX), _T0_A0)(void)
2 {
3     T0 = glue(ldub, MEMSUFFIX)(A0);
4 }
5
6 void OPPROTO glue(glue(op_ldsb, MEMSUFFIX), _T0_A0)(void)
7 {
8     T0 = glue(ldsb, MEMSUFFIX)(A0);
9 }
10
11 void OPPROTO glue(glue(op_lduw, MEMSUFFIX), _T0_A0)(void)
12 {
13     T0 = glue(lduw, MEMSUFFIX)(A0);
14 }
15
16 void OPPROTO glue(glue(op_ldsw, MEMSUFFIX), _T0_A0)(void)
17 {
18     T0 = glue(ldsw, MEMSUFFIX)(A0);
19 }
20
21 void OPPROTO glue(glue(op_ldl, MEMSUFFIX), _T0_A0)(void)
22 {
23     T0 = (uint32_t)glue(ldl, MEMSUFFIX)(A0);
24 }
25
26 void OPPROTO glue(glue(op_ldub, MEMSUFFIX), _T1_A0)(void)
27 {
28     T1 = glue(ldub, MEMSUFFIX)(A0);
29 }
30
31 void OPPROTO glue(glue(op_ldsb, MEMSUFFIX), _T1_A0)(void)
32 {
33     T1 = glue(ldsb, MEMSUFFIX)(A0);
34 }
35
36 void OPPROTO glue(glue(op_lduw, MEMSUFFIX), _T1_A0)(void)
37 {
38     T1 = glue(lduw, MEMSUFFIX)(A0);
39 }
40
41 void OPPROTO glue(glue(op_ldsw, MEMSUFFIX), _T1_A0)(void)
42 {
43     T1 = glue(ldsw, MEMSUFFIX)(A0);
44 }
45
46 void OPPROTO glue(glue(op_ldl, MEMSUFFIX), _T1_A0)(void)
47 {
48     T1 = glue(ldl, MEMSUFFIX)(A0);
49 }
50
51 void OPPROTO glue(glue(op_stb, MEMSUFFIX), _T0_A0)(void)
52 {
53     glue(stb, MEMSUFFIX)(A0, T0);
54 }
55
56 void OPPROTO glue(glue(op_stw, MEMSUFFIX), _T0_A0)(void)
57 {
58     glue(stw, MEMSUFFIX)(A0, T0);
59 }
60
61 void OPPROTO glue(glue(op_stl, MEMSUFFIX), _T0_A0)(void)
62 {
63     glue(stl, MEMSUFFIX)(A0, T0);
64 }
65
66 #if 0
67 void OPPROTO glue(glue(op_stb, MEMSUFFIX), _T1_A0)(void)
68 {
69     glue(stb, MEMSUFFIX)(A0, T1);
70 }
71 #endif
72
73 void OPPROTO glue(glue(op_stw, MEMSUFFIX), _T1_A0)(void)
74 {
75     glue(stw, MEMSUFFIX)(A0, T1);
76 }
77
78 void OPPROTO glue(glue(op_stl, MEMSUFFIX), _T1_A0)(void)
79 {
80     glue(stl, MEMSUFFIX)(A0, T1);
81 }
82
83 /* SSE/MMX support */
84 void OPPROTO glue(glue(op_ldq, MEMSUFFIX), _env_A0)(void)
85 {
86     uint64_t *p;
87     p = (uint64_t *)((char *)env + PARAM1);
88     *p = glue(ldq, MEMSUFFIX)(A0);
89 }
90
91 void OPPROTO glue(glue(op_stq, MEMSUFFIX), _env_A0)(void)
92 {
93     uint64_t *p;
94     p = (uint64_t *)((char *)env + PARAM1);
95     glue(stq, MEMSUFFIX)(A0, *p);
96 }
97
98 void OPPROTO glue(glue(op_ldo, MEMSUFFIX), _env_A0)(void)
99 {
100     XMMReg *p;
101     p = (XMMReg *)((char *)env + PARAM1);
102     p->XMM_Q(0) = glue(ldq, MEMSUFFIX)(A0);
103     p->XMM_Q(1) = glue(ldq, MEMSUFFIX)(A0 + 8);
104 }
105
106 void OPPROTO glue(glue(op_sto, MEMSUFFIX), _env_A0)(void)
107 {
108     XMMReg *p;
109     p = (XMMReg *)((char *)env + PARAM1);
110     glue(stq, MEMSUFFIX)(A0, p->XMM_Q(0));
111     glue(stq, MEMSUFFIX)(A0 + 8, p->XMM_Q(1));
112 }
113
114 #ifdef TARGET_X86_64
115 void OPPROTO glue(glue(op_ldsl, MEMSUFFIX), _T0_A0)(void)
116 {
117     T0 = (int32_t)glue(ldl, MEMSUFFIX)(A0);
118 }
119
120 void OPPROTO glue(glue(op_ldsl, MEMSUFFIX), _T1_A0)(void)
121 {
122     T1 = (int32_t)glue(ldl, MEMSUFFIX)(A0);
123 }
124
125 void OPPROTO glue(glue(op_ldq, MEMSUFFIX), _T0_A0)(void)
126 {
127     T0 = glue(ldq, MEMSUFFIX)(A0);
128 }
129
130 void OPPROTO glue(glue(op_ldq, MEMSUFFIX), _T1_A0)(void)
131 {
132     T1 = glue(ldq, MEMSUFFIX)(A0);
133 }
134
135 void OPPROTO glue(glue(op_stq, MEMSUFFIX), _T0_A0)(void)
136 {
137     glue(stq, MEMSUFFIX)(A0, T0);
138 }
139
140 void OPPROTO glue(glue(op_stq, MEMSUFFIX), _T1_A0)(void)
141 {
142     glue(stq, MEMSUFFIX)(A0, T1);
143 }
144 #endif
145
146 #undef MEMSUFFIX