x87.isa (5084:675cb680830f) x87.isa (5162:5af26efb306e)
1// Copyright (c) 2007 The Hewlett-Packard Development Company
2// All rights reserved.
3//
4// Redistribution and use of this software in source and binary forms,
5// with or without modification, are permitted provided that the
6// following conditions are met:
7//
8// The software must be used only for Non-Commercial Use which means any

--- 39 unchanged lines hidden (view full) ---

48// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
49// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
50// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
51// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
52// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53//
54// Authors: Gabe Black
55
1// Copyright (c) 2007 The Hewlett-Packard Development Company
2// All rights reserved.
3//
4// Redistribution and use of this software in source and binary forms,
5// with or without modification, are permitted provided that the
6// following conditions are met:
7//
8// The software must be used only for Non-Commercial Use which means any

--- 39 unchanged lines hidden (view full) ---

48// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
49// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
50// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
51// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
52// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53//
54// Authors: Gabe Black
55
560x1B: decode OPCODE_OP_BOTTOM3 {
57 //0x0: esc0();
58 0x0: decode MODRM_REG {
59 0x0: fadd();
60 0x1: fmul();
61 0x2: fcom();
62 0x3: fcomp();
63 0x4: fsub();
64 0x5: fsubr();
65 0x6: fdiv();
66 0x7: fdivr();
67 }
68 //0x1: esc1();
69 0x1: decode MODRM_REG {
70 0x0: fld();
71 0x1: decode MODRM_MOD {
72 0x3: fxch();
73 default: Inst::UD2();
56format WarnUnimpl {
57 0x1B: decode OPCODE_OP_BOTTOM3 {
58 //0x0: esc0();
59 0x0: decode MODRM_REG {
60 0x0: fadd();
61 0x1: fmul();
62 0x2: fcom();
63 0x3: fcomp();
64 0x4: fsub();
65 0x5: fsubr();
66 0x6: fdiv();
67 0x7: fdivr();
74 }
68 }
75 0x2: decode MODRM_MOD {
76 0x3: decode MODRM_RM {
77 0x0: fnop();
69 //0x1: esc1();
70 0x1: decode MODRM_REG {
71 0x0: fld();
72 0x1: decode MODRM_MOD {
73 0x3: fxch();
78 default: Inst::UD2();
79 }
74 default: Inst::UD2();
75 }
80 default: fst();
81 }
82 0x3: decode MODRM_MOD {
83 0x3: Inst::UD2();
84 default: fstp();
85 }
86 0x4: decode MODRM_MOD {
87 0x3: decode MODRM_RM {
88 0x0: fchs();
89 0x1: fabs();
90 0x4: ftst();
91 0x5: fxam();
92 default: Inst::UD2();
76 0x2: decode MODRM_MOD {
77 0x3: decode MODRM_RM {
78 0x0: fnop();
79 default: Inst::UD2();
80 }
81 default: fst();
93 }
82 }
94 default: fldenv();
95 }
96 0x5: decode MODRM_MOD {
97 0x3: decode MODRM_RM {
98 0x0: fld1();
99 0x1: fldl2t();
100 0x2: fldl2e();
101 0x3: fldpi();
102 0x4: fldlg2();
103 0x5: fldln2();
104 0x6: fldz();
83 0x3: decode MODRM_MOD {
84 0x3: Inst::UD2();
85 default: fstp();
105 }
86 }
106 default: fldcw_Mw();
107 }
108 0x6: decode MODRM_MOD {
109 0x3: decode MODRM_RM {
110 0x0: f2xm1();
111 0x1: fyl2x();
112 0x2: fptan();
113 0x3: fpatan();
114 0x4: fxtract();
115 0x5: fprem1();
116 0x6: fdecstp();
117 0x7: fincstp();
87 0x4: decode MODRM_MOD {
88 0x3: decode MODRM_RM {
89 0x0: fchs();
90 0x1: fabs();
91 0x4: ftst();
92 0x5: fxam();
93 default: Inst::UD2();
94 }
95 default: fldenv();
118 }
96 }
119 default: fnstenv();
97 0x5: decode MODRM_MOD {
98 0x3: decode MODRM_RM {
99 0x0: fld1();
100 0x1: fldl2t();
101 0x2: fldl2e();
102 0x3: fldpi();
103 0x4: fldlg2();
104 0x5: fldln2();
105 0x6: fldz();
106 }
107 default: fldcw_Mw();
108 }
109 0x6: decode MODRM_MOD {
110 0x3: decode MODRM_RM {
111 0x0: f2xm1();
112 0x1: fyl2x();
113 0x2: fptan();
114 0x3: fpatan();
115 0x4: fxtract();
116 0x5: fprem1();
117 0x6: fdecstp();
118 0x7: fincstp();
119 }
120 default: fnstenv();
121 }
122 0x7: decode MODRM_MOD {
123 0x3: decode MODRM_RM {
124 0x0: fprem();
125 0x1: fyl2xp1();
126 0x2: fsqrt();
127 0x3: fsincos();
128 0x4: frndint();
129 0x5: fscale();
130 0x6: fsin();
131 0x7: fcos();
132 }
133 default: fnstcw_Mw();
134 }
120 }
135 }
121 0x7: decode MODRM_MOD {
122 0x3: decode MODRM_RM {
123 0x0: fprem();
124 0x1: fyl2xp1();
125 0x2: fsqrt();
126 0x3: fsincos();
127 0x4: frndint();
128 0x5: fscale();
129 0x6: fsin();
130 0x7: fcos();
136 //0x2: esc2();
137 0x2: decode MODRM_REG {
138 0x0: decode MODRM_MOD {
139 0x3: fcmovb();
140 default: fiadd();
131 }
141 }
132 default: fnstcw_Mw();
142 0x1: decode MODRM_MOD {
143 0x3: fcmove();
144 default: fimul();
145 }
146 0x2: decode MODRM_MOD {
147 0x3: fcmovbe();
148 default: ficom();
149 }
150 0x3: decode MODRM_MOD {
151 0x3: fcmovu();
152 default: ficomp();
153 }
154 0x4: decode MODRM_MOD {
155 0x3: Inst::UD2();
156 default: fisub();
157 }
158 0x5: decode MODRM_MOD {
159 0x3: decode MODRM_RM {
160 0x1: fucompp();
161 default: Inst::UD2();
162 }
163 default: fisubr();
164 }
165 0x6: decode MODRM_MOD {
166 0x3: Inst::UD2();
167 default: fidiv();
168 }
169 0x7: decode MODRM_MOD {
170 0x3: Inst::UD2();
171 default: fidivr();
172 }
133 }
173 }
134 }
135 //0x2: esc2();
136 0x2: decode MODRM_REG {
137 0x0: decode MODRM_MOD {
138 0x3: fcmovb();
139 default: fiadd();
140 }
141 0x1: decode MODRM_MOD {
142 0x3: fcmove();
143 default: fimul();
144 }
145 0x2: decode MODRM_MOD {
146 0x3: fcmovbe();
147 default: ficom();
148 }
149 0x3: decode MODRM_MOD {
150 0x3: fcmovu();
151 default: ficomp();
152 }
153 0x4: decode MODRM_MOD {
154 0x3: Inst::UD2();
155 default: fisub();
156 }
157 0x5: decode MODRM_MOD {
158 0x3: decode MODRM_RM {
159 0x1: fucompp();
174 //0x3: esc3();
175 0x3: decode MODRM_REG {
176 0x0: decode MODRM_MOD {
177 0x3: fcmovnb();
178 default: fild();
179 }
180 0x1: decode MODRM_MOD {
181 0x3: fcmovne();
182 default: fisttp();
183 }
184 0x2: decode MODRM_MOD {
185 0x3: fcmovnbe();
186 default: fist();
187 }
188 0x3: decode MODRM_MOD {
189 0x3: fcmovnu();
190 default: fistp();
191 }
192 0x4: decode MODRM_MOD {
193 0x3: decode MODRM_RM {
194 0x2: fnclex();
195 0x3: fninit();
196 default: Inst::UD2();
197 }
160 default: Inst::UD2();
161 }
198 default: Inst::UD2();
199 }
162 default: fisubr();
163 }
164 0x6: decode MODRM_MOD {
165 0x3: Inst::UD2();
166 default: fidiv();
167 }
168 0x7: decode MODRM_MOD {
169 0x3: Inst::UD2();
170 default: fidivr();
171 }
172 }
173 //0x3: esc3();
174 0x3: decode MODRM_REG {
175 0x0: decode MODRM_MOD {
176 0x3: fcmovnb();
177 default: fild();
178 }
179 0x1: decode MODRM_MOD {
180 0x3: fcmovne();
181 default: fisttp();
182 }
183 0x2: decode MODRM_MOD {
184 0x3: fcmovnbe();
185 default: fist();
186 }
187 0x3: decode MODRM_MOD {
188 0x3: fcmovnu();
189 default: fistp();
190 }
191 0x4: decode MODRM_MOD {
192 0x3: decode MODRM_RM {
193 0x2: fnclex();
194 0x3: fninit();
200 0x5: decode MODRM_MOD {
201 0x3: fucomi();
202 default: fld();
203 }
204 0x6: decode MODRM_MOD {
205 0x3: fcomi();
195 default: Inst::UD2();
196 }
206 default: Inst::UD2();
207 }
197 default: Inst::UD2();
208 0x7: decode MODRM_MOD {
209 0x3: Inst::UD2();
210 default: fstp();
211 }
198 }
212 }
199 0x5: decode MODRM_MOD {
200 0x3: fucomi();
201 default: fld();
213 //0x4: esc4();
214 0x4: decode MODRM_REG {
215 0x0: fadd();
216 0x1: fmul();
217 0x2: decode MODRM_MOD {
218 0x3: Inst::UD2();
219 default: fcom();
220 }
221 0x3: decode MODRM_MOD {
222 0x3: Inst::UD2();
223 default: fcomp();
224 }
225 0x4: decode MODRM_MOD {
226 0x3: fsubr();
227 default: fsub();
228 }
229 0x5: decode MODRM_MOD {
230 0x3: fsub();
231 default: fsubr();
232 }
233 0x6: decode MODRM_MOD {
234 0x3: fdivr();
235 default: fdiv();
236 }
237 0x7: decode MODRM_MOD {
238 0x3: fdiv();
239 default: fdivr();
240 }
202 }
241 }
203 0x6: decode MODRM_MOD {
204 0x3: fcomi();
205 default: Inst::UD2();
206 }
207 0x7: decode MODRM_MOD {
208 0x3: Inst::UD2();
209 default: fstp();
210 }
211 }
212 //0x4: esc4();
213 0x4: decode MODRM_REG {
214 0x0: fadd();
215 0x1: fmul();
216 0x2: decode MODRM_MOD {
217 0x3: Inst::UD2();
218 default: fcom();
219 }
220 0x3: decode MODRM_MOD {
221 0x3: Inst::UD2();
222 default: fcomp();
223 }
224 0x4: decode MODRM_MOD {
225 0x3: fsubr();
226 default: fsub();
227 }
228 0x5: decode MODRM_MOD {
229 0x3: fsub();
230 default: fsubr();
231 }
232 0x6: decode MODRM_MOD {
233 0x3: fdivr();
234 default: fdiv();
235 }
236 0x7: decode MODRM_MOD {
237 0x3: fdiv();
238 default: fdivr();
239 }
240 }
241 //0x5: esc5();
242 0x5: decode MODRM_REG {
243 0x0: decode MODRM_MOD {
244 0x3: ffree();
245 default: Inst::FLD(Mq);
246 }
247 0x1: decode MODRM_MOD {
248 0x3: Inst::UD2();
249 default: fisttp();
250 }
251 0x2: Inst::FST(Mq);
252 0x3: Inst::FSTP(Mq);
253 0x4: decode MODRM_MOD {
254 0x3: fucom();
255 default: frstor();
256 }
257 0x5: decode MODRM_MOD {
258 0x3: fucomp();
259 default: Inst::UD2();
260 }
261 0x6: decode MODRM_MOD {
262 0x3: Inst::UD2();
263 default: fnsave();
264 }
265 0x7: decode MODRM_MOD {
266 0x3: Inst::UD2();
267 default: fnstsw();
268 }
269 }
270 //0x6: esc6();
271 0x6: decode MODRM_REG {
272 0x0: decode MODRM_MOD {
273 0x3: faddp();
274 default: fiadd();
275 }
276 0x1: decode MODRM_MOD {
277 0x3: fmulp();
278 default: fimul();
279 }
280 0x2: decode MODRM_MOD {
281 0x3: Inst::UD2();
282 default: ficom();
283 }
284 0x3: decode MODRM_MOD {
285 0x3: decode MODRM_RM {
286 0x1: fcompp();
242 //0x5: esc5();
243 0x5: decode MODRM_REG {
244 0x0: decode MODRM_MOD {
245 0x3: ffree();
246 default: Inst::FLD(Mq);
247 }
248 0x1: decode MODRM_MOD {
249 0x3: Inst::UD2();
250 default: fisttp();
251 }
252 0x2: Inst::FST(Mq);
253 0x3: Inst::FSTP(Mq);
254 0x4: decode MODRM_MOD {
255 0x3: fucom();
256 default: frstor();
257 }
258 0x5: decode MODRM_MOD {
259 0x3: fucomp();
287 default: Inst::UD2();
288 }
260 default: Inst::UD2();
261 }
289 default: ficomp();
262 0x6: decode MODRM_MOD {
263 0x3: Inst::UD2();
264 default: fnsave();
265 }
266 0x7: decode MODRM_MOD {
267 0x3: Inst::UD2();
268 default: fnstsw();
269 }
290 }
270 }
291 0x4: decode MODRM_MOD {
292 0x3: fsubrp();
293 default: fisub();
271 //0x6: esc6();
272 0x6: decode MODRM_REG {
273 0x0: decode MODRM_MOD {
274 0x3: faddp();
275 default: fiadd();
276 }
277 0x1: decode MODRM_MOD {
278 0x3: fmulp();
279 default: fimul();
280 }
281 0x2: decode MODRM_MOD {
282 0x3: Inst::UD2();
283 default: ficom();
284 }
285 0x3: decode MODRM_MOD {
286 0x3: decode MODRM_RM {
287 0x1: fcompp();
288 default: Inst::UD2();
289 }
290 default: ficomp();
291 }
292 0x4: decode MODRM_MOD {
293 0x3: fsubrp();
294 default: fisub();
295 }
296 0x5: decode MODRM_MOD {
297 0x3: fsubp();
298 default: fisubr();
299 }
300 0x6: decode MODRM_MOD {
301 0x3: fdivrp();
302 default: fidiv();
303 }
304 0x7: decode MODRM_MOD {
305 0x3: fdivp();
306 default: fidivr();
307 }
294 }
308 }
295 0x5: decode MODRM_MOD {
296 0x3: fsubp();
297 default: fisubr();
298 }
299 0x6: decode MODRM_MOD {
300 0x3: fdivrp();
301 default: fidiv();
302 }
303 0x7: decode MODRM_MOD {
304 0x3: fdivp();
305 default: fidivr();
306 }
307 }
308 //0x7: esc7();
309 0x7: decode MODRM_REG {
310 0x0: decode MODRM_MOD {
311 0x3: Inst::UD2();
312 default: fild();
313 }
314 0x1: decode MODRM_MOD {
315 0x3: Inst::UD2();
316 default: fisttp();
317 }
318 0x2: decode MODRM_MOD {
319 0x3: Inst::UD2();
320 default: fist();
321 }
322 0x3: decode MODRM_MOD {
323 0x3: Inst::UD2();
324 default: fistp();
325 }
326 0x4: decode MODRM_MOD {
327 0x3: decode MODRM_RM {
328 0x0: fnstsw();
329 default: Inst::UD2();
309 //0x7: esc7();
310 0x7: decode MODRM_REG {
311 0x0: decode MODRM_MOD {
312 0x3: Inst::UD2();
313 default: fild();
330 }
314 }
331 default: fbld();
315 0x1: decode MODRM_MOD {
316 0x3: Inst::UD2();
317 default: fisttp();
318 }
319 0x2: decode MODRM_MOD {
320 0x3: Inst::UD2();
321 default: fist();
322 }
323 0x3: decode MODRM_MOD {
324 0x3: Inst::UD2();
325 default: fistp();
326 }
327 0x4: decode MODRM_MOD {
328 0x3: decode MODRM_RM {
329 0x0: fnstsw();
330 default: Inst::UD2();
331 }
332 default: fbld();
333 }
334 0x5: decode MODRM_MOD {
335 0x3: fucomip();
336 default: fild();
337 }
338 0x6: decode MODRM_MOD {
339 0x3: fcomip();
340 default: fbstp();
341 }
342 0x7: decode MODRM_MOD {
343 0x3: Inst::UD2();
344 default: fistp();
345 }
332 }
346 }
333 0x5: decode MODRM_MOD {
334 0x3: fucomip();
335 default: fild();
336 }
337 0x6: decode MODRM_MOD {
338 0x3: fcomip();
339 default: fbstp();
340 }
341 0x7: decode MODRM_MOD {
342 0x3: Inst::UD2();
343 default: fistp();
344 }
345 }
346}
347 }
348}