move.py (10544:049273bc03f6) move.py (12584:2af98e1fb894)
1# Copyright (c) 2007-2008 The Hewlett-Packard Development Company
2# All rights reserved.
3#
4# The license below extends only to copyright in the software and shall
5# not be construed as granting a license to any other intellectual
6# property including but not limited to intellectual property relating
7# to a hardware implementation of the functionality of the software
8# licensed hereunder. You may use the software subject to the license
9# terms below provided that you ensure that this notice is replicated
10# unmodified and in its entirety in all distributions of the software,
11# modified or unmodified, in source code or in binary form.
12#
13# Redistribution and use in source and binary forms, with or without
14# modification, are permitted provided that the following conditions are
15# met: redistributions of source code must retain the above copyright
16# notice, this list of conditions and the following disclaimer;
17# redistributions in binary form must reproduce the above copyright
18# notice, this list of conditions and the following disclaimer in the
19# documentation and/or other materials provided with the distribution;
20# neither the name of the copyright holders nor the names of its
21# contributors may be used to endorse or promote products derived from
22# this software without specific prior written permission.
23#
24# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35#
36# Authors: Gabe Black
37
38microcode = '''
39
40#
41# Regular moves
42#
43
44def macroop MOV_R_MI {
45 limm t1, imm, dataSize=asz
46 ld reg, seg, [1, t0, t1]
47};
48
49def macroop MOV_MI_R {
50 limm t1, imm, dataSize=asz
51 st reg, seg, [1, t0, t1]
52};
53
54def macroop MOV_R_R {
55 mov reg, reg, regm
56};
57
58def macroop MOV_M_R {
59 st reg, seg, sib, disp
60};
61
62def macroop MOV_P_R {
63 rdip t7
64 st reg, seg, riprel, disp
65};
66
67def macroop MOV_R_M {
68 ld reg, seg, sib, disp
69};
70
71def macroop MOV_R_P {
72 rdip t7
73 ld reg, seg, riprel, disp
74};
75
76def macroop MOV_R_I {
77 limm reg, imm
78};
79
80def macroop MOV_M_I {
81 limm t1, imm
82 st t1, seg, sib, disp
83};
84
85def macroop MOV_P_I {
86 rdip t7
87 limm t1, imm
88 st t1, seg, riprel, disp
89};
90
91#
92# Sign extending moves
93#
94
95def macroop MOVSXD_R_R {
96 sexti reg, regm, 31
97};
98
99def macroop MOVSXD_R_M {
100 ld t1, seg, sib, disp, dataSize=4
101 sexti reg, t1, 31
102};
103
104def macroop MOVSXD_R_P {
105 rdip t7
106 ld t1, seg, riprel, disp, dataSize=4
107 sexti reg, t1, 31
108};
109
110def macroop MOVSX_B_R_R {
111 mov t1, t1, regm, dataSize=1
112 sexti reg, t1, 7
113};
114
115def macroop MOVSX_B_R_M {
116 ld t1, seg, sib, disp, dataSize=1
117 sexti reg, t1, 7
118};
119
120def macroop MOVSX_B_R_P {
121 rdip t7
122 ld t1, seg, riprel, disp, dataSize=1
123 sexti reg, t1, 7
124};
125
126def macroop MOVSX_W_R_R {
127 sexti reg, regm, 15
128};
129
130def macroop MOVSX_W_R_M {
131 ld reg, seg, sib, disp, dataSize=2
132 sexti reg, reg, 15
133};
134
135def macroop MOVSX_W_R_P {
136 rdip t7
137 ld reg, seg, riprel, disp, dataSize=2
138 sexti reg, reg, 15
139};
140
141#
142# Zero extending moves
143#
144
145def macroop MOVZX_B_R_R {
146 mov t1, t1, regm, dataSize=1
147 zexti reg, t1, 7
148};
149
150def macroop MOVZX_B_R_M {
151 ld t1, seg, sib, disp, dataSize=1
152 zexti reg, t1, 7
153};
154
155def macroop MOVZX_B_R_P {
156 rdip t7
157 ld t1, seg, riprel, disp, dataSize=1
158 zexti reg, t1, 7
159};
160
161def macroop MOVZX_W_R_R {
162 zexti reg, regm, 15
163};
164
165def macroop MOVZX_W_R_M {
166 ld t1, seg, sib, disp, dataSize=2
167 zexti reg, t1, 15
168};
169
170def macroop MOVZX_W_R_P {
171 rdip t7
172 ld t1, seg, riprel, disp, dataSize=2
173 zexti reg, t1, 15
174};
175
176def macroop MOV_C_R {
1# Copyright (c) 2007-2008 The Hewlett-Packard Development Company
2# All rights reserved.
3#
4# The license below extends only to copyright in the software and shall
5# not be construed as granting a license to any other intellectual
6# property including but not limited to intellectual property relating
7# to a hardware implementation of the functionality of the software
8# licensed hereunder. You may use the software subject to the license
9# terms below provided that you ensure that this notice is replicated
10# unmodified and in its entirety in all distributions of the software,
11# modified or unmodified, in source code or in binary form.
12#
13# Redistribution and use in source and binary forms, with or without
14# modification, are permitted provided that the following conditions are
15# met: redistributions of source code must retain the above copyright
16# notice, this list of conditions and the following disclaimer;
17# redistributions in binary form must reproduce the above copyright
18# notice, this list of conditions and the following disclaimer in the
19# documentation and/or other materials provided with the distribution;
20# neither the name of the copyright holders nor the names of its
21# contributors may be used to endorse or promote products derived from
22# this software without specific prior written permission.
23#
24# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35#
36# Authors: Gabe Black
37
38microcode = '''
39
40#
41# Regular moves
42#
43
44def macroop MOV_R_MI {
45 limm t1, imm, dataSize=asz
46 ld reg, seg, [1, t0, t1]
47};
48
49def macroop MOV_MI_R {
50 limm t1, imm, dataSize=asz
51 st reg, seg, [1, t0, t1]
52};
53
54def macroop MOV_R_R {
55 mov reg, reg, regm
56};
57
58def macroop MOV_M_R {
59 st reg, seg, sib, disp
60};
61
62def macroop MOV_P_R {
63 rdip t7
64 st reg, seg, riprel, disp
65};
66
67def macroop MOV_R_M {
68 ld reg, seg, sib, disp
69};
70
71def macroop MOV_R_P {
72 rdip t7
73 ld reg, seg, riprel, disp
74};
75
76def macroop MOV_R_I {
77 limm reg, imm
78};
79
80def macroop MOV_M_I {
81 limm t1, imm
82 st t1, seg, sib, disp
83};
84
85def macroop MOV_P_I {
86 rdip t7
87 limm t1, imm
88 st t1, seg, riprel, disp
89};
90
91#
92# Sign extending moves
93#
94
95def macroop MOVSXD_R_R {
96 sexti reg, regm, 31
97};
98
99def macroop MOVSXD_R_M {
100 ld t1, seg, sib, disp, dataSize=4
101 sexti reg, t1, 31
102};
103
104def macroop MOVSXD_R_P {
105 rdip t7
106 ld t1, seg, riprel, disp, dataSize=4
107 sexti reg, t1, 31
108};
109
110def macroop MOVSX_B_R_R {
111 mov t1, t1, regm, dataSize=1
112 sexti reg, t1, 7
113};
114
115def macroop MOVSX_B_R_M {
116 ld t1, seg, sib, disp, dataSize=1
117 sexti reg, t1, 7
118};
119
120def macroop MOVSX_B_R_P {
121 rdip t7
122 ld t1, seg, riprel, disp, dataSize=1
123 sexti reg, t1, 7
124};
125
126def macroop MOVSX_W_R_R {
127 sexti reg, regm, 15
128};
129
130def macroop MOVSX_W_R_M {
131 ld reg, seg, sib, disp, dataSize=2
132 sexti reg, reg, 15
133};
134
135def macroop MOVSX_W_R_P {
136 rdip t7
137 ld reg, seg, riprel, disp, dataSize=2
138 sexti reg, reg, 15
139};
140
141#
142# Zero extending moves
143#
144
145def macroop MOVZX_B_R_R {
146 mov t1, t1, regm, dataSize=1
147 zexti reg, t1, 7
148};
149
150def macroop MOVZX_B_R_M {
151 ld t1, seg, sib, disp, dataSize=1
152 zexti reg, t1, 7
153};
154
155def macroop MOVZX_B_R_P {
156 rdip t7
157 ld t1, seg, riprel, disp, dataSize=1
158 zexti reg, t1, 7
159};
160
161def macroop MOVZX_W_R_R {
162 zexti reg, regm, 15
163};
164
165def macroop MOVZX_W_R_M {
166 ld t1, seg, sib, disp, dataSize=2
167 zexti reg, t1, 15
168};
169
170def macroop MOVZX_W_R_P {
171 rdip t7
172 ld t1, seg, riprel, disp, dataSize=2
173 zexti reg, t1, 15
174};
175
176def macroop MOV_C_R {
177 .serializing
177 .serialize_after
178 .adjust_env maxOsz
179 wrcr reg, regm
180};
181
182def macroop MOV_R_C {
178 .adjust_env maxOsz
179 wrcr reg, regm
180};
181
182def macroop MOV_R_C {
183 .serializing
183 .serialize_after
184 .adjust_env maxOsz
185 rdcr reg, regm
186};
187
188def macroop MOV_D_R {
184 .adjust_env maxOsz
185 rdcr reg, regm
186};
187
188def macroop MOV_D_R {
189 .serializing
189 .serialize_after
190 .adjust_env maxOsz
191 wrdr reg, regm
192};
193
194def macroop MOV_R_D {
195 .adjust_env maxOsz
196 rddr reg, regm
197};
198
199def macroop MOV_R_S {
200 rdsel reg, regm
201};
202
203def macroop MOV_M_S {
204 rdsel t1, reg
205 st t1, seg, sib, disp, dataSize=2
206};
207
208def macroop MOV_P_S {
209 rdip t7
210 rdsel t1, reg
211 st t1, seg, riprel, disp, dataSize=2
212};
213
214def macroop MOV_REAL_S_R {
215 zexti t2, regm, 15, dataSize=8
216 slli t3, t2, 4, dataSize=8
217 wrsel reg, regm
218 wrbase reg, t3, dataSize=8
219};
220
221def macroop MOV_REAL_S_M {
222 ld t1, seg, sib, disp, dataSize=2
223 zexti t2, t1, 15, dataSize=8
224 slli t3, t2, 4, dataSize=8
225 wrsel reg, t1
226 wrbase reg, t3, dataSize=8
227};
228
229def macroop MOV_REAL_S_P {
230 panic "RIP relative addressing shouldn't happen in real mode"
231};
232
233def macroop MOV_S_R {
234 andi t0, regm, 0xFC, flags=(EZF,), dataSize=2
235 br label("processDescriptor"), flags=(CEZF,)
236 andi t2, regm, 0xF8, dataSize=8
237 andi t0, regm, 0x4, flags=(EZF,), dataSize=2
238 br label("globalDescriptor"), flags=(CEZF,)
239 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
240 br label("processDescriptor")
241globalDescriptor:
242 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
243processDescriptor:
244 chks regm, t3, dataSize=8
245 wrdl reg, t3, regm
246 wrsel reg, regm
247};
248
249def macroop MOV_S_M {
250 ld t1, seg, sib, disp, dataSize=2
251 andi t0, t1, 0xFC, flags=(EZF,), dataSize=2
252 br label("processDescriptor"), flags=(CEZF,)
253 andi t2, t1, 0xF8, dataSize=8
254 andi t0, t1, 0x4, flags=(EZF,), dataSize=2
255 br label("globalDescriptor"), flags=(CEZF,)
256 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
257 br label("processDescriptor")
258globalDescriptor:
259 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
260processDescriptor:
261 chks t1, t3, dataSize=8
262 wrdl reg, t3, t1
263 wrsel reg, t1
264};
265
266def macroop MOV_S_P {
267 rdip t7
268 ld t1, seg, riprel, disp, dataSize=2
269 andi t0, t1, 0xFC, flags=(EZF,), dataSize=2
270 br label("processDescriptor"), flags=(CEZF,)
271 andi t2, t1, 0xF8, dataSize=8
272 andi t0, t1, 0x4, flags=(EZF,), dataSize=2
273 br label("globalDescriptor"), flags=(CEZF,)
274 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
275 br label("processDescriptor")
276globalDescriptor:
277 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
278processDescriptor:
279 chks t1, t3, dataSize=8
280 wrdl reg, t3, t1
281 wrsel reg, t1
282};
283
284def macroop MOVSS_S_R {
285 andi t0, regm, 0xFC, flags=(EZF,), dataSize=2
286 br label("processDescriptor"), flags=(CEZF,)
287 andi t2, regm, 0xF8, dataSize=8
288 andi t0, regm, 0x4, flags=(EZF,), dataSize=2
289 br label("globalDescriptor"), flags=(CEZF,)
290 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
291 br label("processDescriptor")
292globalDescriptor:
293 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
294processDescriptor:
295 chks regm, t3, SSCheck, dataSize=8
296 wrdl reg, t3, regm
297 wrsel reg, regm
298};
299
300def macroop MOVSS_S_M {
301 ld t1, seg, sib, disp, dataSize=2
302 andi t0, t1, 0xFC, flags=(EZF,), dataSize=2
303 br label("processDescriptor"), flags=(CEZF,)
304 andi t2, t1, 0xF8, dataSize=8
305 andi t0, t1, 0x4, flags=(EZF,), dataSize=2
306 br label("globalDescriptor"), flags=(CEZF,)
307 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
308 br label("processDescriptor")
309globalDescriptor:
310 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
311processDescriptor:
312 chks t1, t3, SSCheck, dataSize=8
313 wrdl reg, t3, t1
314 wrsel reg, t1
315};
316
317def macroop MOVSS_S_P {
318 rdip t7
319 ld t1, seg, riprel, disp, dataSize=2
320 andi t0, t1, 0xFC, flags=(EZF,), dataSize=2
321 br label("processDescriptor"), flags=(CEZF,)
322 andi t2, t1, 0xF8, dataSize=8
323 andi t0, t1, 0x4, flags=(EZF,), dataSize=2
324 br label("globalDescriptor"), flags=(CEZF,)
325 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
326 br label("processDescriptor")
327globalDescriptor:
328 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
329processDescriptor:
330 chks t1, t3, SSCheck, dataSize=8
331 wrdl reg, t3, t1
332 wrsel reg, t1
333};
334
335def macroop MOVNTI_M_R {
336 st reg, seg, sib, disp
337};
338
339def macroop MOVNTI_P_R {
340 rdip t7
341 st reg, seg, riprel, disp
342};
343
344def macroop MOVD_XMM_R {
345 mov2fp xmml, regm, srcSize=dsz, destSize=8
346 lfpimm xmmh, 0
347};
348
349def macroop MOVD_XMM_M {
350 ldfp xmml, seg, sib, disp, dataSize=dsz
351 lfpimm xmmh, 0
352};
353
354def macroop MOVD_XMM_P {
355 rdip t7
356 ldfp xmml, seg, riprel, disp, dataSize=dsz
357 lfpimm xmmh, 0
358};
359
360def macroop MOVD_R_XMM {
361 mov2int reg, xmmlm, size=dsz
362};
363
364def macroop MOVD_M_XMM {
365 stfp xmml, seg, sib, disp, dataSize=dsz
366};
367
368def macroop MOVD_P_XMM {
369 rdip t7
370 stfp xmml, seg, riprel, disp, dataSize=dsz
371};
372
373'''
374#let {{
375# class MOVD(Inst):
376# "GenFault ${new UnimpInstFault}"
377#}};
190 .adjust_env maxOsz
191 wrdr reg, regm
192};
193
194def macroop MOV_R_D {
195 .adjust_env maxOsz
196 rddr reg, regm
197};
198
199def macroop MOV_R_S {
200 rdsel reg, regm
201};
202
203def macroop MOV_M_S {
204 rdsel t1, reg
205 st t1, seg, sib, disp, dataSize=2
206};
207
208def macroop MOV_P_S {
209 rdip t7
210 rdsel t1, reg
211 st t1, seg, riprel, disp, dataSize=2
212};
213
214def macroop MOV_REAL_S_R {
215 zexti t2, regm, 15, dataSize=8
216 slli t3, t2, 4, dataSize=8
217 wrsel reg, regm
218 wrbase reg, t3, dataSize=8
219};
220
221def macroop MOV_REAL_S_M {
222 ld t1, seg, sib, disp, dataSize=2
223 zexti t2, t1, 15, dataSize=8
224 slli t3, t2, 4, dataSize=8
225 wrsel reg, t1
226 wrbase reg, t3, dataSize=8
227};
228
229def macroop MOV_REAL_S_P {
230 panic "RIP relative addressing shouldn't happen in real mode"
231};
232
233def macroop MOV_S_R {
234 andi t0, regm, 0xFC, flags=(EZF,), dataSize=2
235 br label("processDescriptor"), flags=(CEZF,)
236 andi t2, regm, 0xF8, dataSize=8
237 andi t0, regm, 0x4, flags=(EZF,), dataSize=2
238 br label("globalDescriptor"), flags=(CEZF,)
239 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
240 br label("processDescriptor")
241globalDescriptor:
242 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
243processDescriptor:
244 chks regm, t3, dataSize=8
245 wrdl reg, t3, regm
246 wrsel reg, regm
247};
248
249def macroop MOV_S_M {
250 ld t1, seg, sib, disp, dataSize=2
251 andi t0, t1, 0xFC, flags=(EZF,), dataSize=2
252 br label("processDescriptor"), flags=(CEZF,)
253 andi t2, t1, 0xF8, dataSize=8
254 andi t0, t1, 0x4, flags=(EZF,), dataSize=2
255 br label("globalDescriptor"), flags=(CEZF,)
256 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
257 br label("processDescriptor")
258globalDescriptor:
259 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
260processDescriptor:
261 chks t1, t3, dataSize=8
262 wrdl reg, t3, t1
263 wrsel reg, t1
264};
265
266def macroop MOV_S_P {
267 rdip t7
268 ld t1, seg, riprel, disp, dataSize=2
269 andi t0, t1, 0xFC, flags=(EZF,), dataSize=2
270 br label("processDescriptor"), flags=(CEZF,)
271 andi t2, t1, 0xF8, dataSize=8
272 andi t0, t1, 0x4, flags=(EZF,), dataSize=2
273 br label("globalDescriptor"), flags=(CEZF,)
274 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
275 br label("processDescriptor")
276globalDescriptor:
277 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
278processDescriptor:
279 chks t1, t3, dataSize=8
280 wrdl reg, t3, t1
281 wrsel reg, t1
282};
283
284def macroop MOVSS_S_R {
285 andi t0, regm, 0xFC, flags=(EZF,), dataSize=2
286 br label("processDescriptor"), flags=(CEZF,)
287 andi t2, regm, 0xF8, dataSize=8
288 andi t0, regm, 0x4, flags=(EZF,), dataSize=2
289 br label("globalDescriptor"), flags=(CEZF,)
290 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
291 br label("processDescriptor")
292globalDescriptor:
293 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
294processDescriptor:
295 chks regm, t3, SSCheck, dataSize=8
296 wrdl reg, t3, regm
297 wrsel reg, regm
298};
299
300def macroop MOVSS_S_M {
301 ld t1, seg, sib, disp, dataSize=2
302 andi t0, t1, 0xFC, flags=(EZF,), dataSize=2
303 br label("processDescriptor"), flags=(CEZF,)
304 andi t2, t1, 0xF8, dataSize=8
305 andi t0, t1, 0x4, flags=(EZF,), dataSize=2
306 br label("globalDescriptor"), flags=(CEZF,)
307 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
308 br label("processDescriptor")
309globalDescriptor:
310 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
311processDescriptor:
312 chks t1, t3, SSCheck, dataSize=8
313 wrdl reg, t3, t1
314 wrsel reg, t1
315};
316
317def macroop MOVSS_S_P {
318 rdip t7
319 ld t1, seg, riprel, disp, dataSize=2
320 andi t0, t1, 0xFC, flags=(EZF,), dataSize=2
321 br label("processDescriptor"), flags=(CEZF,)
322 andi t2, t1, 0xF8, dataSize=8
323 andi t0, t1, 0x4, flags=(EZF,), dataSize=2
324 br label("globalDescriptor"), flags=(CEZF,)
325 ld t3, tsl, [1, t0, t2], dataSize=8, addressSize=8
326 br label("processDescriptor")
327globalDescriptor:
328 ld t3, tsg, [1, t0, t2], dataSize=8, addressSize=8
329processDescriptor:
330 chks t1, t3, SSCheck, dataSize=8
331 wrdl reg, t3, t1
332 wrsel reg, t1
333};
334
335def macroop MOVNTI_M_R {
336 st reg, seg, sib, disp
337};
338
339def macroop MOVNTI_P_R {
340 rdip t7
341 st reg, seg, riprel, disp
342};
343
344def macroop MOVD_XMM_R {
345 mov2fp xmml, regm, srcSize=dsz, destSize=8
346 lfpimm xmmh, 0
347};
348
349def macroop MOVD_XMM_M {
350 ldfp xmml, seg, sib, disp, dataSize=dsz
351 lfpimm xmmh, 0
352};
353
354def macroop MOVD_XMM_P {
355 rdip t7
356 ldfp xmml, seg, riprel, disp, dataSize=dsz
357 lfpimm xmmh, 0
358};
359
360def macroop MOVD_R_XMM {
361 mov2int reg, xmmlm, size=dsz
362};
363
364def macroop MOVD_M_XMM {
365 stfp xmml, seg, sib, disp, dataSize=dsz
366};
367
368def macroop MOVD_P_XMM {
369 rdip t7
370 stfp xmml, seg, riprel, disp, dataSize=dsz
371};
372
373'''
374#let {{
375# class MOVD(Inst):
376# "GenFault ${new UnimpInstFault}"
377#}};