1# Copyright (c) 2007 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 = '''
39def macroop MOVAPS_XMM_M {
40    # Check low address.
41    ldfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
42    ldfp xmml, seg, sib, disp, dataSize=8
43};
44
45def macroop MOVAPS_XMM_P {
46    rdip t7
47    # Check low address.
48    ldfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
49    ldfp xmml, seg, riprel, disp, dataSize=8
50};
51
52def macroop MOVAPS_M_XMM {
53    # Check low address.
54    stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
55    stfp xmml, seg, sib, disp, dataSize=8
56};
57
58def macroop MOVAPS_P_XMM {
59    rdip t7
60    # Check low address.
61    stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
62    stfp xmml, seg, riprel, disp, dataSize=8
63};
64
65def macroop MOVAPS_XMM_XMM {
66    # Check low address.
67    movfp xmml, xmmlm, dataSize=8
68    movfp xmmh, xmmhm, dataSize=8
69};
70
71def macroop MOVAPD_XMM_XMM {
72    movfp xmml, xmmlm, dataSize=8
73    movfp xmmh, xmmhm, dataSize=8
74};
75
76def macroop MOVAPD_XMM_M {
77    ldfp xmml, seg, sib, "DISPLACEMENT", dataSize=8
78    ldfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
79};
80
81def macroop MOVAPD_XMM_P {
82    rdip t7
83    ldfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
84    ldfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
85};
86
87def macroop MOVAPD_M_XMM {
88    stfp xmml, seg, sib, "DISPLACEMENT", dataSize=8
89    stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
90};
91
92def macroop MOVAPD_P_XMM {
93    rdip t7
94    stfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
95    stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
96};
97
98def macroop MOVUPS_XMM_XMM {
99    movfp xmml, xmmlm, dataSize=8
100    movfp xmmh, xmmhm, dataSize=8
101};
102
103def macroop MOVUPS_XMM_M {
104    ldfp xmml, seg, sib, "DISPLACEMENT", dataSize=8
105    ldfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
106};
107
108def macroop MOVUPS_XMM_P {
109    rdip t7
110    ldfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
111    ldfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
112};
113
114def macroop MOVUPS_M_XMM {
115    stfp xmml, seg, sib, "DISPLACEMENT", dataSize=8
116    stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
117};
118
119def macroop MOVUPS_P_XMM {
120    rdip t7
121    stfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
122    stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
123};
124
125def macroop MOVUPD_XMM_XMM {
126    movfp xmml, xmmlm, dataSize=8
127    movfp xmmh, xmmhm, dataSize=8
128};
129
130def macroop MOVUPD_XMM_M {
131    ldfp xmml, seg, sib, "DISPLACEMENT", dataSize=8
132    ldfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
133};
134
135def macroop MOVUPD_XMM_P {
136    rdip t7
137    ldfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
138    ldfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
139};
140
141def macroop MOVUPD_M_XMM {
142    stfp xmml, seg, sib, "DISPLACEMENT", dataSize=8
143    stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
144};
145
146def macroop MOVUPD_P_XMM {
147    rdip t7
148    stfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
149    stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
150};
151
152def macroop MOVHPS_XMM_M {
153    ldfp xmmh, seg, sib, disp, dataSize=8
154};
155
156def macroop MOVHPS_XMM_P {
157    rdip t7
158    ldfp xmmh, seg, riprel, disp, dataSize=8
159};
160
161def macroop MOVHPS_M_XMM {
162    stfp xmmh, seg, sib, disp, dataSize=8
163};
164
165def macroop MOVHPS_P_XMM {
166    rdip t7
167    stfp xmmh, seg, riprel, disp, dataSize=8
168};
169
170def macroop MOVHPD_XMM_M {
171    ldfp xmmh, seg, sib, disp, dataSize=8
172};
173
174def macroop MOVHPD_XMM_P {
175    rdip t7
176    ldfp xmmh, seg, riprel, disp, dataSize=8
177};
178
179def macroop MOVHPD_M_XMM {
180    stfp xmmh, seg, sib, disp, dataSize=8
181};
182
183def macroop MOVHPD_P_XMM {
184    rdip t7
185    stfp xmmh, seg, riprel, disp, dataSize=8
186};
187
188def macroop MOVLPS_XMM_M {
189    ldfp xmml, seg, sib, disp, dataSize=8
190};
191
192def macroop MOVLPS_XMM_P {
193    rdip t7
194    ldfp xmml, seg, riprel, disp, dataSize=8
195};
196
197def macroop MOVLPS_M_XMM {
198    stfp xmml, seg, sib, disp, dataSize=8
199};
200
201def macroop MOVLPS_P_XMM {
202    rdip t7
203    stfp xmml, seg, riprel, disp, dataSize=8
204};
205
206def macroop MOVLPD_XMM_M {
207    ldfp xmml, seg, sib, disp, dataSize=8
208};
209
210def macroop MOVLPD_XMM_P {
211    rdip t7
212    ldfp xmml, seg, riprel, disp, dataSize=8
213};
214
215def macroop MOVLPD_M_XMM {
216    stfp xmml, seg, sib, disp, dataSize=8
217};
218
219def macroop MOVLPD_P_XMM {
220    rdip t7
221    stfp xmml, seg, riprel, disp, dataSize=8
222};
223
224def macroop MOVHLPS_XMM_XMM {
225    movfp xmml, xmmhm, dataSize=8
226};
227
228def macroop MOVLHPS_XMM_XMM {
229    movfp xmmh, xmmlm, dataSize=8
230};
231
232def macroop MOVSS_XMM_XMM {
233    movfp xmml, xmmlm, dataSize=4
234};
235
236def macroop MOVSS_XMM_M {
237    lfpimm xmml, 0
238    lfpimm xmmh, 0
239    ldfp xmml, seg, sib, disp, dataSize=4
240};
241
242def macroop MOVSS_XMM_P {
243    rdip t7
244    lfpimm xmml, 0
245    lfpimm xmmh, 0
246    ldfp xmml, seg, riprel, disp, dataSize=4
247};
248
249def macroop MOVSS_M_XMM {
250    stfp xmml, seg, sib, disp, dataSize=4
251};
252
253def macroop MOVSS_P_XMM {
254    rdip t7
255    stfp xmml, seg, riprel, disp, dataSize=4
256};
257
258def macroop MOVSD_XMM_M {
259    lfpimm xmmh, 0
260    ldfp xmml, seg, sib, disp, dataSize=8
261};
262
263def macroop MOVSD_XMM_P {
264    rdip t7
265    lfpimm xmmh, 0
266    ldfp xmml, seg, riprel, disp, dataSize=8
267};
268
269def macroop MOVSD_M_XMM {
270    stfp xmml, seg, sib, disp, dataSize=8
271};
272
273def macroop MOVSD_P_XMM {
274    rdip t7
275    stfp xmml, seg, riprel, disp, dataSize=8
276};
277
278def macroop MOVSD_XMM_XMM {
279    movfp xmml, xmmlm, dataSize=8
280};
281'''
282