x87.isa revision 5162
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