14825Sgblack@eecs.umich.edu// Copyright (c) 2007 The Hewlett-Packard Development Company
29582Snilay@cs.wisc.edu// Copyright (c) 2012-13 Mark D. Hill and David A. Wood
311159Ssteve.reinhardt@amd.com// Copyright (c) 2015 Advanced Micro Devices, Inc.
411159Ssteve.reinhardt@amd.com//
54825Sgblack@eecs.umich.edu// All rights reserved.
64825Sgblack@eecs.umich.edu//
77087Snate@binkert.org// The license below extends only to copyright in the software and shall
87087Snate@binkert.org// not be construed as granting a license to any other intellectual
97087Snate@binkert.org// property including but not limited to intellectual property relating
107087Snate@binkert.org// to a hardware implementation of the functionality of the software
117087Snate@binkert.org// licensed hereunder.  You may use the software subject to the license
127087Snate@binkert.org// terms below provided that you ensure that this notice is replicated
137087Snate@binkert.org// unmodified and in its entirety in all distributions of the software,
147087Snate@binkert.org// modified or unmodified, in source code or in binary form.
154825Sgblack@eecs.umich.edu//
167087Snate@binkert.org// Redistribution and use in source and binary forms, with or without
177087Snate@binkert.org// modification, are permitted provided that the following conditions are
187087Snate@binkert.org// met: redistributions of source code must retain the above copyright
197087Snate@binkert.org// notice, this list of conditions and the following disclaimer;
207087Snate@binkert.org// redistributions in binary form must reproduce the above copyright
217087Snate@binkert.org// notice, this list of conditions and the following disclaimer in the
227087Snate@binkert.org// documentation and/or other materials provided with the distribution;
237087Snate@binkert.org// neither the name of the copyright holders nor the names of its
244825Sgblack@eecs.umich.edu// contributors may be used to endorse or promote products derived from
257087Snate@binkert.org// this software without specific prior written permission.
264825Sgblack@eecs.umich.edu//
274825Sgblack@eecs.umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
284825Sgblack@eecs.umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
294825Sgblack@eecs.umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
304825Sgblack@eecs.umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
314825Sgblack@eecs.umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
324825Sgblack@eecs.umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
334825Sgblack@eecs.umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
344825Sgblack@eecs.umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
354825Sgblack@eecs.umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
364825Sgblack@eecs.umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
374825Sgblack@eecs.umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
384825Sgblack@eecs.umich.edu//
394825Sgblack@eecs.umich.edu// Authors: Gabe Black
409582Snilay@cs.wisc.edu//          Nilay Vaish
4111159Ssteve.reinhardt@amd.com//          Steve Reinhardt
424825Sgblack@eecs.umich.edu
435162Sgblack@eecs.umich.eduformat WarnUnimpl {
445162Sgblack@eecs.umich.edu    0x1B: decode OPCODE_OP_BOTTOM3 {
455162Sgblack@eecs.umich.edu        0x0: decode MODRM_REG {
4610044Snilay@cs.wisc.edu            0x0: decode MODRM_MOD {
4710044Snilay@cs.wisc.edu                0x3: Inst::FADD1(Eq);
4810044Snilay@cs.wisc.edu                // 32-bit memory operand
4910044Snilay@cs.wisc.edu                default: Inst::FADD1(Md);
5010044Snilay@cs.wisc.edu            }
5110784Snilay@cs.wisc.edu            0x1: decode MODRM_MOD {
5210784Snilay@cs.wisc.edu                0x3: Inst::FMUL1(Eq);
5310784Snilay@cs.wisc.edu                default: Inst::FMUL1(Md);
5410784Snilay@cs.wisc.edu            }
555162Sgblack@eecs.umich.edu            0x2: fcom();
565162Sgblack@eecs.umich.edu            0x3: fcomp();
5710044Snilay@cs.wisc.edu            0x4: decode MODRM_MOD {
5810044Snilay@cs.wisc.edu                0x3: Inst::FSUB1(Eq);
5910044Snilay@cs.wisc.edu                default: Inst::FSUB1(Md);
6010044Snilay@cs.wisc.edu            }
615162Sgblack@eecs.umich.edu            0x5: fsubr();
6210784Snilay@cs.wisc.edu            0x6: decode MODRM_MOD {
6310784Snilay@cs.wisc.edu                0x3: Inst::FDIV1(Eq);
6410784Snilay@cs.wisc.edu                default: Inst::FDIV1(Md);
6510784Snilay@cs.wisc.edu            }
665162Sgblack@eecs.umich.edu            0x7: fdivr();
674825Sgblack@eecs.umich.edu        }
685162Sgblack@eecs.umich.edu        0x1: decode MODRM_REG {
699582Snilay@cs.wisc.edu            0x0: decode MODRM_MOD {
709582Snilay@cs.wisc.edu                0x3: Inst::FLD(Eq);
719582Snilay@cs.wisc.edu                // 32-bit load
729582Snilay@cs.wisc.edu                default: Inst::FLD(Md);
739582Snilay@cs.wisc.edu            }
745162Sgblack@eecs.umich.edu            0x1: decode MODRM_MOD {
7510043Snilay@cs.wisc.edu                0x3: Inst::FXCH(Eq);
764825Sgblack@eecs.umich.edu                default: Inst::UD2();
774825Sgblack@eecs.umich.edu            }
785162Sgblack@eecs.umich.edu            0x2: decode MODRM_MOD {
795162Sgblack@eecs.umich.edu                0x3: decode MODRM_RM {
805162Sgblack@eecs.umich.edu                    0x0: fnop();
815162Sgblack@eecs.umich.edu                    default: Inst::UD2();
825162Sgblack@eecs.umich.edu                }
839894Sandreas@sandberg.pp.se                default: Inst::FST(Ed);
845162Sgblack@eecs.umich.edu            }
855162Sgblack@eecs.umich.edu            0x3: decode MODRM_MOD {
865162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
879894Sandreas@sandberg.pp.se                default: Inst::FSTP(Ed);
885162Sgblack@eecs.umich.edu            }
895162Sgblack@eecs.umich.edu            0x4: decode MODRM_MOD {
905162Sgblack@eecs.umich.edu                0x3: decode MODRM_RM {
919470Snilay@cs.wisc.edu                    0x0: Inst::FCHS();
929470Snilay@cs.wisc.edu                    0x1: Inst::FABS();
935162Sgblack@eecs.umich.edu                    0x4: ftst();
945162Sgblack@eecs.umich.edu                    0x5: fxam();
955162Sgblack@eecs.umich.edu                    default: Inst::UD2();
965162Sgblack@eecs.umich.edu                }
979895Sandreas@sandberg.pp.se                default: Inst::FLDENV(M);
985162Sgblack@eecs.umich.edu            }
995162Sgblack@eecs.umich.edu            0x5: decode MODRM_MOD {
1005162Sgblack@eecs.umich.edu                0x3: decode MODRM_RM {
1019582Snilay@cs.wisc.edu                    0x0: Inst::FLD1();
1029582Snilay@cs.wisc.edu                    0x1: Inst::FLDL2T();
1039582Snilay@cs.wisc.edu                    0x2: Inst::FLDL2E();
1049582Snilay@cs.wisc.edu                    0x3: Inst::FLDPI();
1059582Snilay@cs.wisc.edu                    0x4: Inst::FLDLG2();
1069582Snilay@cs.wisc.edu                    0x5: Inst::FLDLN2();
1079582Snilay@cs.wisc.edu                    0x6: Inst::FLDZ();
1085162Sgblack@eecs.umich.edu                }
1099582Snilay@cs.wisc.edu                default: Inst::FLDCW(Mw);
1105162Sgblack@eecs.umich.edu            }
1115162Sgblack@eecs.umich.edu            0x6: decode MODRM_MOD {
1125162Sgblack@eecs.umich.edu                0x3: decode MODRM_RM {
1135162Sgblack@eecs.umich.edu                    0x0: f2xm1();
1149582Snilay@cs.wisc.edu                    0x1: Inst::FYL2X();
1159582Snilay@cs.wisc.edu                    0x2: Inst::FPTAN();
1165162Sgblack@eecs.umich.edu                    0x3: fpatan();
1175162Sgblack@eecs.umich.edu                    0x4: fxtract();
1189582Snilay@cs.wisc.edu                    0x5: Inst::FPREM1();
1195162Sgblack@eecs.umich.edu                    0x6: fdecstp();
1205162Sgblack@eecs.umich.edu                    0x7: fincstp();
1215162Sgblack@eecs.umich.edu                }
1229895Sandreas@sandberg.pp.se                default: Inst::FNSTENV(M);
1235162Sgblack@eecs.umich.edu            }
1245162Sgblack@eecs.umich.edu            0x7: decode MODRM_MOD {
1255162Sgblack@eecs.umich.edu                0x3: decode MODRM_RM {
1269582Snilay@cs.wisc.edu                    0x0: Inst::FPREM();
1275162Sgblack@eecs.umich.edu                    0x1: fyl2xp1();
1285162Sgblack@eecs.umich.edu                    0x2: fsqrt();
1299371Snilay@cs.wisc.edu                    0x3: Inst::FSINCOS();
1305162Sgblack@eecs.umich.edu                    0x4: frndint();
1315162Sgblack@eecs.umich.edu                    0x5: fscale();
1329472Snilay@cs.wisc.edu                    0x6: Inst::FSIN();
1339472Snilay@cs.wisc.edu                    0x7: Inst::FCOS();
1345162Sgblack@eecs.umich.edu                }
1359372Snilay@cs.wisc.edu                default: Inst::FNSTCW(Mw);
1365162Sgblack@eecs.umich.edu            }
1374825Sgblack@eecs.umich.edu        }
1385162Sgblack@eecs.umich.edu        //0x2: esc2();
1395162Sgblack@eecs.umich.edu        0x2: decode MODRM_REG {
1405162Sgblack@eecs.umich.edu            0x0: decode MODRM_MOD {
1415162Sgblack@eecs.umich.edu                0x3: fcmovb();
1425162Sgblack@eecs.umich.edu                default: fiadd();
1435162Sgblack@eecs.umich.edu            }
1445162Sgblack@eecs.umich.edu            0x1: decode MODRM_MOD {
1455162Sgblack@eecs.umich.edu                0x3: fcmove();
1465162Sgblack@eecs.umich.edu                default: fimul();
1475162Sgblack@eecs.umich.edu            }
1485162Sgblack@eecs.umich.edu            0x2: decode MODRM_MOD {
1495162Sgblack@eecs.umich.edu                0x3: fcmovbe();
1505162Sgblack@eecs.umich.edu                default: ficom();
1515162Sgblack@eecs.umich.edu            }
1525162Sgblack@eecs.umich.edu            0x3: decode MODRM_MOD {
1535162Sgblack@eecs.umich.edu                0x3: fcmovu();
1545162Sgblack@eecs.umich.edu                default: ficomp();
1555162Sgblack@eecs.umich.edu            }
1565162Sgblack@eecs.umich.edu            0x4: decode MODRM_MOD {
1575162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
1585162Sgblack@eecs.umich.edu                default: fisub();
1595162Sgblack@eecs.umich.edu            }
1605162Sgblack@eecs.umich.edu            0x5: decode MODRM_MOD {
1615162Sgblack@eecs.umich.edu                0x3: decode MODRM_RM {
1625162Sgblack@eecs.umich.edu                    0x1: fucompp();
1635162Sgblack@eecs.umich.edu                    default: Inst::UD2();
1645162Sgblack@eecs.umich.edu                }
1655162Sgblack@eecs.umich.edu                default: fisubr();
1665162Sgblack@eecs.umich.edu            }
1675162Sgblack@eecs.umich.edu            0x6: decode MODRM_MOD {
1685162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
1695162Sgblack@eecs.umich.edu                default: fidiv();
1705162Sgblack@eecs.umich.edu            }
1715162Sgblack@eecs.umich.edu            0x7: decode MODRM_MOD {
1725162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
1735162Sgblack@eecs.umich.edu                default: fidivr();
1745162Sgblack@eecs.umich.edu            }
1754825Sgblack@eecs.umich.edu        }
1765162Sgblack@eecs.umich.edu        //0x3: esc3();
1775162Sgblack@eecs.umich.edu        0x3: decode MODRM_REG {
1785162Sgblack@eecs.umich.edu            0x0: decode MODRM_MOD {
1795162Sgblack@eecs.umich.edu                0x3: fcmovnb();
18011159Ssteve.reinhardt@amd.com                default: Inst::FILD(Md); // 32-bit int
1815162Sgblack@eecs.umich.edu            }
1825162Sgblack@eecs.umich.edu            0x1: decode MODRM_MOD {
1835162Sgblack@eecs.umich.edu                0x3: fcmovne();
1845162Sgblack@eecs.umich.edu                default: fisttp();
1855162Sgblack@eecs.umich.edu            }
1865162Sgblack@eecs.umich.edu            0x2: decode MODRM_MOD {
1875162Sgblack@eecs.umich.edu                0x3: fcmovnbe();
1885162Sgblack@eecs.umich.edu                default: fist();
1895162Sgblack@eecs.umich.edu            }
1905162Sgblack@eecs.umich.edu            0x3: decode MODRM_MOD {
1915162Sgblack@eecs.umich.edu                0x3: fcmovnu();
1925162Sgblack@eecs.umich.edu                default: fistp();
1935162Sgblack@eecs.umich.edu            }
1945162Sgblack@eecs.umich.edu            0x4: decode MODRM_MOD {
1955162Sgblack@eecs.umich.edu                0x3: decode MODRM_RM {
1965162Sgblack@eecs.umich.edu                    0x2: fnclex();
1975162Sgblack@eecs.umich.edu                    0x3: fninit();
1985162Sgblack@eecs.umich.edu                    default: Inst::UD2();
1995162Sgblack@eecs.umich.edu                }
2004825Sgblack@eecs.umich.edu                default: Inst::UD2();
2014825Sgblack@eecs.umich.edu            }
2025162Sgblack@eecs.umich.edu            0x5: decode MODRM_MOD {
20311159Ssteve.reinhardt@amd.com                // 'R' insists on having a size qualifier, so I picked 'q',
20411159Ssteve.reinhardt@amd.com                // but I don't think it has any effect
20511159Ssteve.reinhardt@amd.com                0x3: Inst::FUCOMI(Rq);
2069582Snilay@cs.wisc.edu                // 80-bit load
2079894Sandreas@sandberg.pp.se                default: Inst::FLD80(M);
2084825Sgblack@eecs.umich.edu            }
2095162Sgblack@eecs.umich.edu            0x6: decode MODRM_MOD {
2105162Sgblack@eecs.umich.edu                0x3: fcomi();
2114825Sgblack@eecs.umich.edu                default: Inst::UD2();
2124825Sgblack@eecs.umich.edu            }
2135162Sgblack@eecs.umich.edu            0x7: decode MODRM_MOD {
2145162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
2159894Sandreas@sandberg.pp.se                default: Inst::FST80P(M);
2165162Sgblack@eecs.umich.edu            }
2174825Sgblack@eecs.umich.edu        }
2185162Sgblack@eecs.umich.edu        //0x4: esc4();
2195162Sgblack@eecs.umich.edu        0x4: decode MODRM_REG {
22010044Snilay@cs.wisc.edu            0x0: decode MODRM_MOD {
22110044Snilay@cs.wisc.edu                0x3: Inst::FADD2(Eq);
22210044Snilay@cs.wisc.edu                default: Inst::FADD2(Mq);
22310044Snilay@cs.wisc.edu            }
22410784Snilay@cs.wisc.edu            0x1: decode MODRM_MOD {
22510784Snilay@cs.wisc.edu                0x3: Inst::FMUL2(Eq);
22610784Snilay@cs.wisc.edu                default: Inst::FMUL2(Mq);
22710784Snilay@cs.wisc.edu            }
2285162Sgblack@eecs.umich.edu            0x2: decode MODRM_MOD {
2295162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
2305162Sgblack@eecs.umich.edu                default: fcom();
2315162Sgblack@eecs.umich.edu            }
2325162Sgblack@eecs.umich.edu            0x3: decode MODRM_MOD {
2335162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
2345162Sgblack@eecs.umich.edu                default: fcomp();
2355162Sgblack@eecs.umich.edu            }
2365162Sgblack@eecs.umich.edu            0x4: decode MODRM_MOD {
2375162Sgblack@eecs.umich.edu                0x3: fsubr();
23810044Snilay@cs.wisc.edu                default: Inst::FSUB2(Mq);
2395162Sgblack@eecs.umich.edu            }
2405162Sgblack@eecs.umich.edu            0x5: decode MODRM_MOD {
24110044Snilay@cs.wisc.edu                0x3: Inst::FSUB2(Eq);
2425162Sgblack@eecs.umich.edu                default: fsubr();
2435162Sgblack@eecs.umich.edu            }
2445162Sgblack@eecs.umich.edu            0x6: decode MODRM_MOD {
2455162Sgblack@eecs.umich.edu                0x3: fdivr();
24610784Snilay@cs.wisc.edu                default: Inst::FDIV2(Mq);
2475162Sgblack@eecs.umich.edu            }
2485162Sgblack@eecs.umich.edu            0x7: decode MODRM_MOD {
24910784Snilay@cs.wisc.edu                0x3: Inst::FDIV2(Eq);
2505162Sgblack@eecs.umich.edu                default: fdivr();
2515162Sgblack@eecs.umich.edu            }
2524825Sgblack@eecs.umich.edu        }
2535162Sgblack@eecs.umich.edu        //0x5: esc5();
2545162Sgblack@eecs.umich.edu        0x5: decode MODRM_REG {
2555162Sgblack@eecs.umich.edu            0x0: decode MODRM_MOD {
2565162Sgblack@eecs.umich.edu                0x3: ffree();
2579582Snilay@cs.wisc.edu                // 64-bit load
2585162Sgblack@eecs.umich.edu                default: Inst::FLD(Mq);
2595162Sgblack@eecs.umich.edu            }
2605162Sgblack@eecs.umich.edu            0x1: decode MODRM_MOD {
2615162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
2625162Sgblack@eecs.umich.edu                default: fisttp();
2635162Sgblack@eecs.umich.edu            }
26410043Snilay@cs.wisc.edu            0x2: decode MODRM_MOD {
26510043Snilay@cs.wisc.edu                0x3: Inst::FST(Eq);
26610043Snilay@cs.wisc.edu                default: Inst::FST(Mq);
26710043Snilay@cs.wisc.edu            }
26810043Snilay@cs.wisc.edu            0x3: decode MODRM_MOD {
26910043Snilay@cs.wisc.edu                0x3: Inst::FSTP(Eq);
27010043Snilay@cs.wisc.edu                default: Inst::FSTP(Mq);
27110043Snilay@cs.wisc.edu            }
2725162Sgblack@eecs.umich.edu            0x4: decode MODRM_MOD {
2735162Sgblack@eecs.umich.edu                0x3: fucom();
2745162Sgblack@eecs.umich.edu                default: frstor();
2755162Sgblack@eecs.umich.edu            }
2765162Sgblack@eecs.umich.edu            0x5: decode MODRM_MOD {
2775162Sgblack@eecs.umich.edu                0x3: fucomp();
2784825Sgblack@eecs.umich.edu                default: Inst::UD2();
2794825Sgblack@eecs.umich.edu            }
2805162Sgblack@eecs.umich.edu            0x6: decode MODRM_MOD {
2815162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
2825162Sgblack@eecs.umich.edu                default: fnsave();
2835162Sgblack@eecs.umich.edu            }
2845162Sgblack@eecs.umich.edu            0x7: decode MODRM_MOD {
2855162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
2869372Snilay@cs.wisc.edu                default: Inst::FNSTSW(Mw);
2875162Sgblack@eecs.umich.edu            }
2884825Sgblack@eecs.umich.edu        }
2895162Sgblack@eecs.umich.edu        //0x6: esc6();
2905162Sgblack@eecs.umich.edu        0x6: decode MODRM_REG {
2915162Sgblack@eecs.umich.edu            0x0: decode MODRM_MOD {
29210044Snilay@cs.wisc.edu                0x3: decode MODRM_RM {
29310044Snilay@cs.wisc.edu                    0x1: Inst::FADDP();
29410044Snilay@cs.wisc.edu                    default: Inst::FADDP(Eq);
29510044Snilay@cs.wisc.edu                }
2965162Sgblack@eecs.umich.edu                default: fiadd();
2975162Sgblack@eecs.umich.edu            }
2985162Sgblack@eecs.umich.edu            0x1: decode MODRM_MOD {
29910784Snilay@cs.wisc.edu                0x3: Inst::FMULP(Eq);
3005162Sgblack@eecs.umich.edu                default: fimul();
3015162Sgblack@eecs.umich.edu            }
3025162Sgblack@eecs.umich.edu            0x2: decode MODRM_MOD {
3035162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
3045162Sgblack@eecs.umich.edu                default: ficom();
3055162Sgblack@eecs.umich.edu            }
3065162Sgblack@eecs.umich.edu            0x3: decode MODRM_MOD {
3075162Sgblack@eecs.umich.edu                0x3: decode MODRM_RM {
3085162Sgblack@eecs.umich.edu                    0x1: fcompp();
3095162Sgblack@eecs.umich.edu                    default: Inst::UD2();
3105162Sgblack@eecs.umich.edu                }
3115162Sgblack@eecs.umich.edu                default: ficomp();
3125162Sgblack@eecs.umich.edu            }
3135162Sgblack@eecs.umich.edu            0x4: decode MODRM_MOD {
3145162Sgblack@eecs.umich.edu                0x3: fsubrp();
3155162Sgblack@eecs.umich.edu                default: fisub();
3165162Sgblack@eecs.umich.edu            }
3175162Sgblack@eecs.umich.edu            0x5: decode MODRM_MOD {
31810044Snilay@cs.wisc.edu                0x3: decode MODRM_RM {
31910044Snilay@cs.wisc.edu                    0x1: Inst::FSUBP();
32010044Snilay@cs.wisc.edu                    default: Inst::FSUBP(Eq);
32110044Snilay@cs.wisc.edu                }
3225162Sgblack@eecs.umich.edu                default: fisubr();
3235162Sgblack@eecs.umich.edu            }
3245162Sgblack@eecs.umich.edu            0x6: decode MODRM_MOD {
3255162Sgblack@eecs.umich.edu                0x3: fdivrp();
3265162Sgblack@eecs.umich.edu                default: fidiv();
3275162Sgblack@eecs.umich.edu            }
3285162Sgblack@eecs.umich.edu            0x7: decode MODRM_MOD {
32910784Snilay@cs.wisc.edu                0x3: Inst::FDIVP(Eq);
3305162Sgblack@eecs.umich.edu                default: fidivr();
3315162Sgblack@eecs.umich.edu            }
3324825Sgblack@eecs.umich.edu        }
3335162Sgblack@eecs.umich.edu        //0x7: esc7();
3345162Sgblack@eecs.umich.edu        0x7: decode MODRM_REG {
3355162Sgblack@eecs.umich.edu            0x0: decode MODRM_MOD {
3368106Sgblack@eecs.umich.edu                // The ffreep instruction isn't entirely real. It should work
3378106Sgblack@eecs.umich.edu                // the same as ffree but then also pop the register stack.
3388106Sgblack@eecs.umich.edu                0x3: ffreep();
33911159Ssteve.reinhardt@amd.com                default: Inst::FILD(Mw); // 16-bit int
3404825Sgblack@eecs.umich.edu            }
3415162Sgblack@eecs.umich.edu            0x1: decode MODRM_MOD {
3425162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
3435162Sgblack@eecs.umich.edu                default: fisttp();
3444825Sgblack@eecs.umich.edu            }
3455162Sgblack@eecs.umich.edu            0x2: decode MODRM_MOD {
3465162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
3475162Sgblack@eecs.umich.edu                default: fist();
3485162Sgblack@eecs.umich.edu            }
3495162Sgblack@eecs.umich.edu            0x3: decode MODRM_MOD {
3505162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
3515162Sgblack@eecs.umich.edu                default: fistp();
3525162Sgblack@eecs.umich.edu            }
3535162Sgblack@eecs.umich.edu            0x4: decode MODRM_MOD {
3545162Sgblack@eecs.umich.edu                0x3: decode MODRM_RM {
3559372Snilay@cs.wisc.edu                    0x0: Inst::FNSTSW(rAw);
3565162Sgblack@eecs.umich.edu                    default: Inst::UD2();
3575162Sgblack@eecs.umich.edu                }
3585162Sgblack@eecs.umich.edu                default: fbld();
3595162Sgblack@eecs.umich.edu            }
3605162Sgblack@eecs.umich.edu            0x5: decode MODRM_MOD {
36111159Ssteve.reinhardt@amd.com                // 'R' insists on having a size qualifier, so I picked 'q',
36211159Ssteve.reinhardt@amd.com                // but I don't think it has any effect
36311159Ssteve.reinhardt@amd.com                0x3: Inst::FUCOMIP(Rq);
36411159Ssteve.reinhardt@amd.com                default: Inst::FILD(Mq); // 64-bit int
3655162Sgblack@eecs.umich.edu            }
3665162Sgblack@eecs.umich.edu            0x6: decode MODRM_MOD {
3675162Sgblack@eecs.umich.edu                0x3: fcomip();
3685162Sgblack@eecs.umich.edu                default: fbstp();
3695162Sgblack@eecs.umich.edu            }
3705162Sgblack@eecs.umich.edu            0x7: decode MODRM_MOD {
3715162Sgblack@eecs.umich.edu                0x3: Inst::UD2();
3725162Sgblack@eecs.umich.edu                default: fistp();
3735162Sgblack@eecs.umich.edu            }
3744825Sgblack@eecs.umich.edu        }
3754825Sgblack@eecs.umich.edu    }
3764825Sgblack@eecs.umich.edu}
377