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