x87.isa revision 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
9// use which is NOT directed to receiving any direct monetary
10// compensation for, or commercial advantage from such use.  Illustrative
11// examples of non-commercial use are academic research, personal study,
12// teaching, education and corporate research & development.
13// Illustrative examples of commercial use are distributing products for
14// commercial advantage and providing services using the software for
15// commercial advantage.
16//
17// If you wish to use this software or functionality therein that may be
18// covered by patents for commercial use, please contact:
19//     Director of Intellectual Property Licensing
20//     Office of Strategy and Technology
21//     Hewlett-Packard Company
22//     1501 Page Mill Road
23//     Palo Alto, California  94304
24//
25// Redistributions of source code must retain the above copyright notice,
26// this list of conditions and the following disclaimer.  Redistributions
27// in binary form must reproduce the above copyright notice, this list of
28// conditions and the following disclaimer in the documentation and/or
29// other materials provided with the distribution.  Neither the name of
30// the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
31// contributors may be used to endorse or promote products derived from
32// this software without specific prior written permission.  No right of
33// sublicense is granted herewith.  Derivatives of the software and
34// output created using the software may be prepared, but only for
35// Non-Commercial Uses.  Derivatives of the software may be shared with
36// others provided: (i) the others agree to abide by the list of
37// conditions herein which includes the Non-Commercial Use restrictions;
38// and (ii) such Derivatives of the software include the above copyright
39// notice to acknowledge the contribution from this software where
40// applicable, this list of conditions and the disclaimer below.
41//
42// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
45// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
46// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
47// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
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
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();
68        }
69        //0x1: esc1();
70        0x1: decode MODRM_REG {
71            0x0: fld();
72            0x1: decode MODRM_MOD {
73                0x3: fxch();
74                default: Inst::UD2();
75            }
76            0x2: decode MODRM_MOD {
77                0x3: decode MODRM_RM {
78                    0x0: fnop();
79                    default: Inst::UD2();
80                }
81                default: fst();
82            }
83            0x3: decode MODRM_MOD {
84                0x3: Inst::UD2();
85                default: fstp();
86            }
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();
96            }
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            }
135        }
136        //0x2: esc2();
137        0x2: decode MODRM_REG {
138            0x0: decode MODRM_MOD {
139                0x3: fcmovb();
140                default: fiadd();
141            }
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            }
173        }
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                }
198                default: Inst::UD2();
199            }
200            0x5: decode MODRM_MOD {
201                0x3: fucomi();
202                default: fld();
203            }
204            0x6: decode MODRM_MOD {
205                0x3: fcomi();
206                default: Inst::UD2();
207            }
208            0x7: decode MODRM_MOD {
209                0x3: Inst::UD2();
210                default: fstp();
211            }
212        }
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            }
241        }
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();
260                default: Inst::UD2();
261            }
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            }
270        }
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            }
308        }
309        //0x7: esc7();
310        0x7: decode MODRM_REG {
311            0x0: decode MODRM_MOD {
312                0x3: Inst::UD2();
313                default: fild();
314            }
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            }
346        }
347    }
348}
349