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} |