Changeset 38600 in webkit for trunk/JavaScriptCore/assembler/X86Assembler.h
- Timestamp:
- Nov 19, 2008, 11:16:30 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/X86Assembler.h
r38548 r38600 169 169 } OpcodeID; 170 170 171 static const int maxInstructionSize = 16;172 173 X86Assembler(AssemblerBuffer* m_buffer)174 : m_buffer(m_buffer)175 {176 m_buffer->reset();177 }178 179 void emitInt3()180 {181 m_buffer->putByte(OP_INT3);182 }183 184 void pushl_r(RegisterID reg)185 {186 m_buffer->putByte(OP_PUSH_EAX + reg);187 }188 189 void pushl_m(int offset, RegisterID base)190 {191 m_buffer->putByte(OP_GROUP5_Ev);192 emitModRm_opm(GROUP5_OP_PUSH, base, offset);193 }194 195 void pushl_i32(int imm)196 {197 m_buffer->putByte(OP_PUSH_Iz);198 m_buffer->putInt(imm);199 }200 201 void popl_r(RegisterID reg)202 {203 m_buffer->putByte(OP_POP_EAX + reg);204 }205 206 void popl_m(int offset, RegisterID base)207 {208 m_buffer->putByte(OP_GROUP1A_Ev);209 emitModRm_opm(GROUP1A_OP_POP, base, offset);210 }211 212 void movl_rr(RegisterID src, RegisterID dst)213 {214 m_buffer->putByte(OP_MOV_EvGv);215 emitModRm_rr(src, dst);216 }217 218 void addl_rr(RegisterID src, RegisterID dst)219 {220 m_buffer->putByte(OP_ADD_EvGv);221 emitModRm_rr(src, dst);222 }223 224 void addl_i8r(int imm, RegisterID dst)225 {226 m_buffer->putByte(OP_GROUP1_EvIb);227 emitModRm_opr(GROUP1_OP_ADD, dst);228 m_buffer->putByte(imm);229 }230 231 void addl_i8m(int imm, void* addr)232 {233 m_buffer->putByte(OP_GROUP1_EvIb);234 emitModRm_opm(GROUP1_OP_ADD, addr);235 m_buffer->putByte(imm);236 }237 238 void addl_i32r(int imm, RegisterID dst)239 {240 m_buffer->putByte(OP_GROUP1_EvIz);241 emitModRm_opr(GROUP1_OP_ADD, dst);242 m_buffer->putInt(imm);243 }244 245 void addl_mr(int offset, RegisterID base, RegisterID dst)246 {247 m_buffer->putByte(OP_ADD_GvEv);248 emitModRm_rm(dst, base, offset);249 }250 251 void andl_rr(RegisterID src, RegisterID dst)252 {253 m_buffer->putByte(OP_AND_EvGv);254 emitModRm_rr(src, dst);255 }256 257 void andl_i32r(int imm, RegisterID dst)258 {259 m_buffer->putByte(OP_GROUP1_EvIz);260 emitModRm_opr(GROUP1_OP_AND, dst);261 m_buffer->putInt(imm);262 }263 264 void cmpl_i8r(int imm, RegisterID dst)265 {266 m_buffer->putByte(OP_GROUP1_EvIb);267 emitModRm_opr(GROUP1_OP_CMP, dst);268 m_buffer->putByte(imm);269 }270 271 void cmpl_rr(RegisterID src, RegisterID dst)272 {273 m_buffer->putByte(OP_CMP_EvGv);274 emitModRm_rr(src, dst);275 }276 277 void cmpl_rm(RegisterID src, int offset, RegisterID base)278 {279 m_buffer->putByte(OP_CMP_EvGv);280 emitModRm_rm(src, base, offset);281 }282 283 void cmpl_mr(int offset, RegisterID base, RegisterID dst)284 {285 m_buffer->putByte(OP_CMP_GvEv);286 emitModRm_rm(dst, base, offset);287 }288 289 void cmpl_i32r(int imm, RegisterID dst)290 {291 m_buffer->putByte(OP_GROUP1_EvIz);292 emitModRm_opr(GROUP1_OP_CMP, dst);293 m_buffer->putInt(imm);294 }295 296 void cmpl_i32m(int imm, RegisterID dst)297 {298 m_buffer->putByte(OP_GROUP1_EvIz);299 emitModRm_opm(GROUP1_OP_CMP, dst);300 m_buffer->putInt(imm);301 }302 303 void cmpl_i32m(int imm, int offset, RegisterID dst)304 {305 m_buffer->putByte(OP_GROUP1_EvIz);306 emitModRm_opm(GROUP1_OP_CMP, dst, offset);307 m_buffer->putInt(imm);308 }309 310 void cmpl_i32m(int imm, void* addr)311 {312 m_buffer->putByte(OP_GROUP1_EvIz);313 emitModRm_opm(GROUP1_OP_CMP, addr);314 m_buffer->putInt(imm);315 }316 317 void cmpl_i8m(int imm, int offset, RegisterID base, RegisterID index, int scale)318 {319 m_buffer->putByte(OP_GROUP1_EvIb);320 emitModRm_opmsib(GROUP1_OP_CMP, base, index, scale, offset);321 m_buffer->putByte(imm);322 }323 324 void cmpw_rm(RegisterID src, RegisterID base, RegisterID index, int scale)325 {326 m_buffer->putByte(PRE_OPERAND_SIZE);327 m_buffer->putByte(OP_CMP_EvGv);328 emitModRm_rmsib(src, base, index, scale);329 }330 331 void sete_r(RegisterID dst)332 {333 m_buffer->putByte(OP_2BYTE_ESCAPE);334 m_buffer->putByte(OP_SETE);335 m_buffer->putByte(MODRM(3, 0, dst));336 }337 338 void setz_r(RegisterID dst)339 {340 sete_r(dst);341 }342 343 void setne_r(RegisterID dst)344 {345 m_buffer->putByte(OP_2BYTE_ESCAPE);346 m_buffer->putByte(OP_SETNE);347 m_buffer->putByte(MODRM(3, 0, dst));348 }349 350 void setnz_r(RegisterID dst)351 {352 setne_r(dst);353 }354 355 void orl_rr(RegisterID src, RegisterID dst)356 {357 m_buffer->putByte(OP_OR_EvGv);358 emitModRm_rr(src, dst);359 }360 361 void orl_mr(int offset, RegisterID base, RegisterID dst)362 {363 m_buffer->putByte(OP_OR_GvEv);364 emitModRm_rm(dst, base, offset);365 }366 367 void orl_i32r(int imm, RegisterID dst)368 {369 m_buffer->putByte(OP_GROUP1_EvIb);370 emitModRm_opr(GROUP1_OP_OR, dst);371 m_buffer->putByte(imm);372 }373 374 void subl_rr(RegisterID src, RegisterID dst)375 {376 m_buffer->putByte(OP_SUB_EvGv);377 emitModRm_rr(src, dst);378 }379 380 void subl_i8r(int imm, RegisterID dst)381 {382 m_buffer->putByte(OP_GROUP1_EvIb);383 emitModRm_opr(GROUP1_OP_SUB, dst);384 m_buffer->putByte(imm);385 }386 387 void subl_i8m(int imm, void* addr)388 {389 m_buffer->putByte(OP_GROUP1_EvIb);390 emitModRm_opm(GROUP1_OP_SUB, addr);391 m_buffer->putByte(imm);392 }393 394 void subl_i32r(int imm, RegisterID dst)395 {396 m_buffer->putByte(OP_GROUP1_EvIz);397 emitModRm_opr(GROUP1_OP_SUB, dst);398 m_buffer->putInt(imm);399 }400 401 void subl_mr(int offset, RegisterID base, RegisterID dst)402 {403 m_buffer->putByte(OP_SUB_GvEv);404 emitModRm_rm(dst, base, offset);405 }406 407 void testl_i32r(int imm, RegisterID dst)408 {409 m_buffer->ensureSpace(maxInstructionSize);410 m_buffer->putByteUnchecked(OP_GROUP3_EvIz);411 emitModRm_opr_Unchecked(GROUP3_OP_TEST, dst);412 m_buffer->putIntUnchecked(imm);413 }414 415 void testl_i32m(int imm, RegisterID dst)416 {417 m_buffer->putByte(OP_GROUP3_EvIz);418 emitModRm_opm(GROUP3_OP_TEST, dst);419 m_buffer->putInt(imm);420 }421 422 void testl_i32m(int imm, int offset, RegisterID dst)423 {424 m_buffer->putByte(OP_GROUP3_EvIz);425 emitModRm_opm(GROUP3_OP_TEST, dst, offset);426 m_buffer->putInt(imm);427 }428 429 void testl_rr(RegisterID src, RegisterID dst)430 {431 m_buffer->putByte(OP_TEST_EvGv);432 emitModRm_rr(src, dst);433 }434 435 void xorl_i8r(int imm, RegisterID dst)436 {437 m_buffer->putByte(OP_GROUP1_EvIb);438 emitModRm_opr(GROUP1_OP_XOR, dst);439 m_buffer->putByte(imm);440 }441 442 void xorl_rr(RegisterID src, RegisterID dst)443 {444 m_buffer->putByte(OP_XOR_EvGv);445 emitModRm_rr(src, dst);446 }447 448 void sarl_i8r(int imm, RegisterID dst)449 {450 if (imm == 1) {451 m_buffer->putByte(OP_GROUP2_Ev1);452 emitModRm_opr(GROUP2_OP_SAR, dst);453 } else {454 m_buffer->putByte(OP_GROUP2_EvIb);455 emitModRm_opr(GROUP2_OP_SAR, dst);456 m_buffer->putByte(imm);457 }458 }459 460 void sarl_CLr(RegisterID dst)461 {462 m_buffer->putByte(OP_GROUP2_EvCL);463 emitModRm_opr(GROUP2_OP_SAR, dst);464 }465 466 void shl_i8r(int imm, RegisterID dst)467 {468 if (imm == 1) {469 m_buffer->putByte(OP_GROUP2_Ev1);470 emitModRm_opr(GROUP2_OP_SHL, dst);471 } else {472 m_buffer->putByte(OP_GROUP2_EvIb);473 emitModRm_opr(GROUP2_OP_SHL, dst);474 m_buffer->putByte(imm);475 }476 }477 478 void shll_CLr(RegisterID dst)479 {480 m_buffer->putByte(OP_GROUP2_EvCL);481 emitModRm_opr(GROUP2_OP_SHL, dst);482 }483 484 void imull_rr(RegisterID src, RegisterID dst)485 {486 m_buffer->putByte(OP_2BYTE_ESCAPE);487 m_buffer->putByte(OP2_IMUL_GvEv);488 emitModRm_rr(dst, src);489 }490 491 void imull_i32r(RegisterID src, int32_t value, RegisterID dst)492 {493 m_buffer->putByte(OP_IMUL_GvEvIz);494 emitModRm_rr(dst, src);495 m_buffer->putInt(value);496 }497 498 void idivl_r(RegisterID dst)499 {500 m_buffer->putByte(OP_GROUP3_Ev);501 emitModRm_opr(GROUP3_OP_IDIV, dst);502 }503 504 void negl_r(RegisterID dst)505 {506 m_buffer->putByte(OP_GROUP3_Ev);507 emitModRm_opr(GROUP3_OP_NEG, dst);508 }509 510 void cdq()511 {512 m_buffer->putByte(OP_CDQ);513 }514 515 void movl_mr(RegisterID base, RegisterID dst)516 {517 m_buffer->putByte(OP_MOV_GvEv);518 emitModRm_rm(dst, base);519 }520 521 void movl_mr(int offset, RegisterID base, RegisterID dst)522 {523 m_buffer->ensureSpace(maxInstructionSize);524 m_buffer->putByteUnchecked(OP_MOV_GvEv);525 emitModRm_rm_Unchecked(dst, base, offset);526 }527 528 void movl_mr(void* addr, RegisterID dst)529 {530 m_buffer->putByte(OP_MOV_GvEv);531 emitModRm_rm(dst, addr);532 }533 534 void movl_mr(int offset, RegisterID base, RegisterID index, int scale, RegisterID dst)535 {536 m_buffer->putByte(OP_MOV_GvEv);537 emitModRm_rmsib(dst, base, index, scale, offset);538 }539 540 void movzbl_rr(RegisterID src, RegisterID dst)541 {542 m_buffer->putByte(OP_2BYTE_ESCAPE);543 m_buffer->putByte(OP2_MOVZX_GvEb);544 emitModRm_rr(dst, src);545 }546 547 void movzwl_mr(int offset, RegisterID base, RegisterID dst)548 {549 m_buffer->putByte(OP_2BYTE_ESCAPE);550 m_buffer->putByte(OP2_MOVZX_GvEw);551 emitModRm_rm(dst, base, offset);552 }553 554 void movzwl_mr(RegisterID base, RegisterID index, int scale, RegisterID dst)555 {556 m_buffer->putByte(OP_2BYTE_ESCAPE);557 m_buffer->putByte(OP2_MOVZX_GvEw);558 emitModRm_rmsib(dst, base, index, scale);559 }560 561 void movzwl_mr(int offset, RegisterID base, RegisterID index, int scale, RegisterID dst)562 {563 m_buffer->putByte(OP_2BYTE_ESCAPE);564 m_buffer->putByte(OP2_MOVZX_GvEw);565 emitModRm_rmsib(dst, base, index, scale, offset);566 }567 568 void movl_rm(RegisterID src, RegisterID base)569 {570 m_buffer->putByte(OP_MOV_EvGv);571 emitModRm_rm(src, base);572 }573 574 void movl_rm(RegisterID src, int offset, RegisterID base)575 {576 m_buffer->ensureSpace(maxInstructionSize);577 m_buffer->putByteUnchecked(OP_MOV_EvGv);578 emitModRm_rm_Unchecked(src, base, offset);579 }580 581 void movl_rm(RegisterID src, int offset, RegisterID base, RegisterID index, int scale)582 {583 m_buffer->putByte(OP_MOV_EvGv);584 emitModRm_rmsib(src, base, index, scale, offset);585 }586 587 void movl_i32r(int imm, RegisterID dst)588 {589 m_buffer->putByte(OP_GROUP11_EvIz);590 emitModRm_opr(GROUP11_MOV, dst);591 m_buffer->putInt(imm);592 }593 594 void movl_i32m(int imm, int offset, RegisterID base)595 {596 m_buffer->ensureSpace(maxInstructionSize);597 m_buffer->putByteUnchecked(OP_GROUP11_EvIz);598 emitModRm_opm_Unchecked(GROUP11_MOV, base, offset);599 m_buffer->putIntUnchecked(imm);600 }601 602 void movl_i32m(int imm, void* addr)603 {604 m_buffer->putByte(OP_GROUP11_EvIz);605 emitModRm_opm(GROUP11_MOV, addr);606 m_buffer->putInt(imm);607 }608 609 void leal_mr(int offset, RegisterID base, RegisterID dst)610 {611 m_buffer->putByte(OP_LEA);612 emitModRm_rm(dst, base, offset);613 }614 615 void leal_mr(int offset, RegisterID index, int scale, RegisterID dst)616 {617 m_buffer->putByte(OP_LEA);618 emitModRm_rmsib(dst, X86::noBase, index, scale, offset);619 }620 621 void ret()622 {623 m_buffer->putByte(OP_RET);624 }625 626 void jmp_r(RegisterID dst)627 {628 m_buffer->putByte(OP_GROUP5_Ev);629 emitModRm_opr(GROUP5_OP_JMPN, dst);630 }631 632 void jmp_m(int offset, RegisterID base)633 {634 m_buffer->putByte(OP_GROUP5_Ev);635 emitModRm_opm(GROUP5_OP_JMPN, base, offset);636 }637 638 void movsd_mr(int offset, RegisterID base, XMMRegisterID dst)639 {640 m_buffer->putByte(PRE_SSE_F2);641 m_buffer->putByte(OP_2BYTE_ESCAPE);642 m_buffer->putByte(OP2_MOVSD_VsdWsd);643 emitModRm_rm((RegisterID)dst, base, offset);644 }645 646 void xorpd_mr(void* addr, XMMRegisterID dst)647 {648 m_buffer->putByte(PRE_SSE_66);649 m_buffer->putByte(OP_2BYTE_ESCAPE);650 m_buffer->putByte(OP2_XORPD_VsdWsd);651 emitModRm_rm((RegisterID)dst, addr);652 }653 654 void movsd_rm(XMMRegisterID src, int offset, RegisterID base)655 {656 m_buffer->putByte(PRE_SSE_F2);657 m_buffer->putByte(OP_2BYTE_ESCAPE);658 m_buffer->putByte(OP2_MOVSD_WsdVsd);659 emitModRm_rm((RegisterID)src, base, offset);660 }661 662 void movd_rr(XMMRegisterID src, RegisterID dst)663 {664 m_buffer->putByte(PRE_SSE_66);665 m_buffer->putByte(OP_2BYTE_ESCAPE);666 m_buffer->putByte(OP2_MOVD_EdVd);667 emitModRm_rr((RegisterID)src, dst);668 }669 670 void cvtsi2sd_rr(RegisterID src, XMMRegisterID dst)671 {672 m_buffer->putByte(PRE_SSE_F2);673 m_buffer->putByte(OP_2BYTE_ESCAPE);674 m_buffer->putByte(OP2_CVTSI2SD_VsdEd);675 emitModRm_rr((RegisterID)dst, src);676 }677 678 void cvttsd2si_rr(XMMRegisterID src, RegisterID dst)679 {680 m_buffer->putByte(PRE_SSE_F2);681 m_buffer->putByte(OP_2BYTE_ESCAPE);682 m_buffer->putByte(OP2_CVTTSD2SI_GdWsd);683 emitModRm_rr(dst, (RegisterID)src);684 }685 686 void addsd_mr(int offset, RegisterID base, XMMRegisterID dst)687 {688 m_buffer->putByte(PRE_SSE_F2);689 m_buffer->putByte(OP_2BYTE_ESCAPE);690 m_buffer->putByte(OP2_ADDSD_VsdWsd);691 emitModRm_rm((RegisterID)dst, base, offset);692 }693 694 void subsd_mr(int offset, RegisterID base, XMMRegisterID dst)695 {696 m_buffer->putByte(PRE_SSE_F2);697 m_buffer->putByte(OP_2BYTE_ESCAPE);698 m_buffer->putByte(OP2_SUBSD_VsdWsd);699 emitModRm_rm((RegisterID)dst, base, offset);700 }701 702 void mulsd_mr(int offset, RegisterID base, XMMRegisterID dst)703 {704 m_buffer->putByte(PRE_SSE_F2);705 m_buffer->putByte(OP_2BYTE_ESCAPE);706 m_buffer->putByte(OP2_MULSD_VsdWsd);707 emitModRm_rm((RegisterID)dst, base, offset);708 }709 710 void addsd_rr(XMMRegisterID src, XMMRegisterID dst)711 {712 m_buffer->putByte(PRE_SSE_F2);713 m_buffer->putByte(OP_2BYTE_ESCAPE);714 m_buffer->putByte(OP2_ADDSD_VsdWsd);715 emitModRm_rr((RegisterID)dst, (RegisterID)src);716 }717 718 void subsd_rr(XMMRegisterID src, XMMRegisterID dst)719 {720 m_buffer->putByte(PRE_SSE_F2);721 m_buffer->putByte(OP_2BYTE_ESCAPE);722 m_buffer->putByte(OP2_SUBSD_VsdWsd);723 emitModRm_rr((RegisterID)dst, (RegisterID)src);724 }725 726 void mulsd_rr(XMMRegisterID src, XMMRegisterID dst)727 {728 m_buffer->putByte(PRE_SSE_F2);729 m_buffer->putByte(OP_2BYTE_ESCAPE);730 m_buffer->putByte(OP2_MULSD_VsdWsd);731 emitModRm_rr((RegisterID)dst, (RegisterID)src);732 }733 734 void ucomis_rr(XMMRegisterID src, XMMRegisterID dst)735 {736 m_buffer->putByte(PRE_SSE_66);737 m_buffer->putByte(OP_2BYTE_ESCAPE);738 m_buffer->putByte(OP2_UCOMISD_VsdWsd);739 emitModRm_rr((RegisterID)dst, (RegisterID)src);740 }741 742 void pextrw_irr(int whichWord, XMMRegisterID src, RegisterID dst)743 {744 m_buffer->putByte(PRE_SSE_66);745 m_buffer->putByte(OP_2BYTE_ESCAPE);746 m_buffer->putByte(OP2_PEXTRW_GdUdIb);747 emitModRm_rr(dst, (RegisterID)src);748 m_buffer->putByte(whichWord);749 }750 751 171 // Opaque label types 752 172 … … 785 205 }; 786 206 787 // FIXME: make this point to a global label, linked later. 788 JmpSrc emitCall() 207 static const int maxInstructionSize = 16; 208 209 X86Assembler(AssemblerBuffer* m_buffer) 210 : m_buffer(m_buffer) 211 { 212 m_buffer->reset(); 213 } 214 215 void int3() 216 { 217 m_buffer->putByte(OP_INT3); 218 } 219 220 void pushl_r(RegisterID reg) 221 { 222 m_buffer->putByte(OP_PUSH_EAX + reg); 223 } 224 225 void pushl_m(int offset, RegisterID base) 226 { 227 m_buffer->putByte(OP_GROUP5_Ev); 228 modRm_opm(GROUP5_OP_PUSH, base, offset); 229 } 230 231 void pushl_i32(int imm) 232 { 233 m_buffer->putByte(OP_PUSH_Iz); 234 m_buffer->putInt(imm); 235 } 236 237 void popl_r(RegisterID reg) 238 { 239 m_buffer->putByte(OP_POP_EAX + reg); 240 } 241 242 void popl_m(int offset, RegisterID base) 243 { 244 m_buffer->putByte(OP_GROUP1A_Ev); 245 modRm_opm(GROUP1A_OP_POP, base, offset); 246 } 247 248 void movl_rr(RegisterID src, RegisterID dst) 249 { 250 m_buffer->putByte(OP_MOV_EvGv); 251 modRm_rr(src, dst); 252 } 253 254 void addl_rr(RegisterID src, RegisterID dst) 255 { 256 m_buffer->putByte(OP_ADD_EvGv); 257 modRm_rr(src, dst); 258 } 259 260 void addl_i8r(int imm, RegisterID dst) 261 { 262 m_buffer->putByte(OP_GROUP1_EvIb); 263 modRm_opr(GROUP1_OP_ADD, dst); 264 m_buffer->putByte(imm); 265 } 266 267 void addl_i8m(int imm, void* addr) 268 { 269 m_buffer->putByte(OP_GROUP1_EvIb); 270 modRm_opm(GROUP1_OP_ADD, addr); 271 m_buffer->putByte(imm); 272 } 273 274 void addl_i32r(int imm, RegisterID dst) 275 { 276 m_buffer->putByte(OP_GROUP1_EvIz); 277 modRm_opr(GROUP1_OP_ADD, dst); 278 m_buffer->putInt(imm); 279 } 280 281 void addl_mr(int offset, RegisterID base, RegisterID dst) 282 { 283 m_buffer->putByte(OP_ADD_GvEv); 284 modRm_rm(dst, base, offset); 285 } 286 287 void andl_rr(RegisterID src, RegisterID dst) 288 { 289 m_buffer->putByte(OP_AND_EvGv); 290 modRm_rr(src, dst); 291 } 292 293 void andl_i32r(int imm, RegisterID dst) 294 { 295 m_buffer->putByte(OP_GROUP1_EvIz); 296 modRm_opr(GROUP1_OP_AND, dst); 297 m_buffer->putInt(imm); 298 } 299 300 void cmpl_i8r(int imm, RegisterID dst) 301 { 302 m_buffer->putByte(OP_GROUP1_EvIb); 303 modRm_opr(GROUP1_OP_CMP, dst); 304 m_buffer->putByte(imm); 305 } 306 307 void cmpl_rr(RegisterID src, RegisterID dst) 308 { 309 m_buffer->putByte(OP_CMP_EvGv); 310 modRm_rr(src, dst); 311 } 312 313 void cmpl_rm(RegisterID src, int offset, RegisterID base) 314 { 315 m_buffer->putByte(OP_CMP_EvGv); 316 modRm_rm(src, base, offset); 317 } 318 319 void cmpl_mr(int offset, RegisterID base, RegisterID dst) 320 { 321 m_buffer->putByte(OP_CMP_GvEv); 322 modRm_rm(dst, base, offset); 323 } 324 325 void cmpl_i32r(int imm, RegisterID dst) 326 { 327 m_buffer->putByte(OP_GROUP1_EvIz); 328 modRm_opr(GROUP1_OP_CMP, dst); 329 m_buffer->putInt(imm); 330 } 331 332 void cmpl_i32m(int imm, RegisterID dst) 333 { 334 m_buffer->putByte(OP_GROUP1_EvIz); 335 modRm_opm(GROUP1_OP_CMP, dst); 336 m_buffer->putInt(imm); 337 } 338 339 void cmpl_i32m(int imm, int offset, RegisterID dst) 340 { 341 m_buffer->putByte(OP_GROUP1_EvIz); 342 modRm_opm(GROUP1_OP_CMP, dst, offset); 343 m_buffer->putInt(imm); 344 } 345 346 void cmpl_i32m(int imm, void* addr) 347 { 348 m_buffer->putByte(OP_GROUP1_EvIz); 349 modRm_opm(GROUP1_OP_CMP, addr); 350 m_buffer->putInt(imm); 351 } 352 353 void cmpl_i8m(int imm, int offset, RegisterID base, RegisterID index, int scale) 354 { 355 m_buffer->putByte(OP_GROUP1_EvIb); 356 modRm_opmsib(GROUP1_OP_CMP, base, index, scale, offset); 357 m_buffer->putByte(imm); 358 } 359 360 void cmpw_rm(RegisterID src, RegisterID base, RegisterID index, int scale) 361 { 362 m_buffer->putByte(PRE_OPERAND_SIZE); 363 m_buffer->putByte(OP_CMP_EvGv); 364 modRm_rmsib(src, base, index, scale); 365 } 366 367 void sete_r(RegisterID dst) 368 { 369 m_buffer->putByte(OP_2BYTE_ESCAPE); 370 m_buffer->putByte(OP_SETE); 371 m_buffer->putByte(MODRM(3, 0, dst)); 372 } 373 374 void setz_r(RegisterID dst) 375 { 376 sete_r(dst); 377 } 378 379 void setne_r(RegisterID dst) 380 { 381 m_buffer->putByte(OP_2BYTE_ESCAPE); 382 m_buffer->putByte(OP_SETNE); 383 m_buffer->putByte(MODRM(3, 0, dst)); 384 } 385 386 void setnz_r(RegisterID dst) 387 { 388 setne_r(dst); 389 } 390 391 void orl_rr(RegisterID src, RegisterID dst) 392 { 393 m_buffer->putByte(OP_OR_EvGv); 394 modRm_rr(src, dst); 395 } 396 397 void orl_mr(int offset, RegisterID base, RegisterID dst) 398 { 399 m_buffer->putByte(OP_OR_GvEv); 400 modRm_rm(dst, base, offset); 401 } 402 403 void orl_i32r(int imm, RegisterID dst) 404 { 405 m_buffer->putByte(OP_GROUP1_EvIb); 406 modRm_opr(GROUP1_OP_OR, dst); 407 m_buffer->putByte(imm); 408 } 409 410 void subl_rr(RegisterID src, RegisterID dst) 411 { 412 m_buffer->putByte(OP_SUB_EvGv); 413 modRm_rr(src, dst); 414 } 415 416 void subl_i8r(int imm, RegisterID dst) 417 { 418 m_buffer->putByte(OP_GROUP1_EvIb); 419 modRm_opr(GROUP1_OP_SUB, dst); 420 m_buffer->putByte(imm); 421 } 422 423 void subl_i8m(int imm, void* addr) 424 { 425 m_buffer->putByte(OP_GROUP1_EvIb); 426 modRm_opm(GROUP1_OP_SUB, addr); 427 m_buffer->putByte(imm); 428 } 429 430 void subl_i32r(int imm, RegisterID dst) 431 { 432 m_buffer->putByte(OP_GROUP1_EvIz); 433 modRm_opr(GROUP1_OP_SUB, dst); 434 m_buffer->putInt(imm); 435 } 436 437 void subl_mr(int offset, RegisterID base, RegisterID dst) 438 { 439 m_buffer->putByte(OP_SUB_GvEv); 440 modRm_rm(dst, base, offset); 441 } 442 443 void testl_i32r(int imm, RegisterID dst) 444 { 445 m_buffer->ensureSpace(maxInstructionSize); 446 m_buffer->putByteUnchecked(OP_GROUP3_EvIz); 447 modRm_opr_Unchecked(GROUP3_OP_TEST, dst); 448 m_buffer->putIntUnchecked(imm); 449 } 450 451 void testl_i32m(int imm, RegisterID dst) 452 { 453 m_buffer->putByte(OP_GROUP3_EvIz); 454 modRm_opm(GROUP3_OP_TEST, dst); 455 m_buffer->putInt(imm); 456 } 457 458 void testl_i32m(int imm, int offset, RegisterID dst) 459 { 460 m_buffer->putByte(OP_GROUP3_EvIz); 461 modRm_opm(GROUP3_OP_TEST, dst, offset); 462 m_buffer->putInt(imm); 463 } 464 465 void testl_rr(RegisterID src, RegisterID dst) 466 { 467 m_buffer->putByte(OP_TEST_EvGv); 468 modRm_rr(src, dst); 469 } 470 471 void xorl_i8r(int imm, RegisterID dst) 472 { 473 m_buffer->putByte(OP_GROUP1_EvIb); 474 modRm_opr(GROUP1_OP_XOR, dst); 475 m_buffer->putByte(imm); 476 } 477 478 void xorl_rr(RegisterID src, RegisterID dst) 479 { 480 m_buffer->putByte(OP_XOR_EvGv); 481 modRm_rr(src, dst); 482 } 483 484 void sarl_i8r(int imm, RegisterID dst) 485 { 486 if (imm == 1) { 487 m_buffer->putByte(OP_GROUP2_Ev1); 488 modRm_opr(GROUP2_OP_SAR, dst); 489 } else { 490 m_buffer->putByte(OP_GROUP2_EvIb); 491 modRm_opr(GROUP2_OP_SAR, dst); 492 m_buffer->putByte(imm); 493 } 494 } 495 496 void sarl_CLr(RegisterID dst) 497 { 498 m_buffer->putByte(OP_GROUP2_EvCL); 499 modRm_opr(GROUP2_OP_SAR, dst); 500 } 501 502 void shl_i8r(int imm, RegisterID dst) 503 { 504 if (imm == 1) { 505 m_buffer->putByte(OP_GROUP2_Ev1); 506 modRm_opr(GROUP2_OP_SHL, dst); 507 } else { 508 m_buffer->putByte(OP_GROUP2_EvIb); 509 modRm_opr(GROUP2_OP_SHL, dst); 510 m_buffer->putByte(imm); 511 } 512 } 513 514 void shll_CLr(RegisterID dst) 515 { 516 m_buffer->putByte(OP_GROUP2_EvCL); 517 modRm_opr(GROUP2_OP_SHL, dst); 518 } 519 520 void imull_rr(RegisterID src, RegisterID dst) 521 { 522 m_buffer->putByte(OP_2BYTE_ESCAPE); 523 m_buffer->putByte(OP2_IMUL_GvEv); 524 modRm_rr(dst, src); 525 } 526 527 void imull_i32r(RegisterID src, int32_t value, RegisterID dst) 528 { 529 m_buffer->putByte(OP_IMUL_GvEvIz); 530 modRm_rr(dst, src); 531 m_buffer->putInt(value); 532 } 533 534 void idivl_r(RegisterID dst) 535 { 536 m_buffer->putByte(OP_GROUP3_Ev); 537 modRm_opr(GROUP3_OP_IDIV, dst); 538 } 539 540 void negl_r(RegisterID dst) 541 { 542 m_buffer->putByte(OP_GROUP3_Ev); 543 modRm_opr(GROUP3_OP_NEG, dst); 544 } 545 546 void cdq() 547 { 548 m_buffer->putByte(OP_CDQ); 549 } 550 551 void movl_mr(RegisterID base, RegisterID dst) 552 { 553 m_buffer->putByte(OP_MOV_GvEv); 554 modRm_rm(dst, base); 555 } 556 557 void movl_mr(int offset, RegisterID base, RegisterID dst) 558 { 559 m_buffer->ensureSpace(maxInstructionSize); 560 m_buffer->putByteUnchecked(OP_MOV_GvEv); 561 modRm_rm_Unchecked(dst, base, offset); 562 } 563 564 void movl_mr(void* addr, RegisterID dst) 565 { 566 m_buffer->putByte(OP_MOV_GvEv); 567 modRm_rm(dst, addr); 568 } 569 570 void movl_mr(int offset, RegisterID base, RegisterID index, int scale, RegisterID dst) 571 { 572 m_buffer->putByte(OP_MOV_GvEv); 573 modRm_rmsib(dst, base, index, scale, offset); 574 } 575 576 void movzbl_rr(RegisterID src, RegisterID dst) 577 { 578 m_buffer->putByte(OP_2BYTE_ESCAPE); 579 m_buffer->putByte(OP2_MOVZX_GvEb); 580 modRm_rr(dst, src); 581 } 582 583 void movzwl_mr(int offset, RegisterID base, RegisterID dst) 584 { 585 m_buffer->putByte(OP_2BYTE_ESCAPE); 586 m_buffer->putByte(OP2_MOVZX_GvEw); 587 modRm_rm(dst, base, offset); 588 } 589 590 void movzwl_mr(RegisterID base, RegisterID index, int scale, RegisterID dst) 591 { 592 m_buffer->putByte(OP_2BYTE_ESCAPE); 593 m_buffer->putByte(OP2_MOVZX_GvEw); 594 modRm_rmsib(dst, base, index, scale); 595 } 596 597 void movzwl_mr(int offset, RegisterID base, RegisterID index, int scale, RegisterID dst) 598 { 599 m_buffer->putByte(OP_2BYTE_ESCAPE); 600 m_buffer->putByte(OP2_MOVZX_GvEw); 601 modRm_rmsib(dst, base, index, scale, offset); 602 } 603 604 void movl_rm(RegisterID src, RegisterID base) 605 { 606 m_buffer->putByte(OP_MOV_EvGv); 607 modRm_rm(src, base); 608 } 609 610 void movl_rm(RegisterID src, int offset, RegisterID base) 611 { 612 m_buffer->ensureSpace(maxInstructionSize); 613 m_buffer->putByteUnchecked(OP_MOV_EvGv); 614 modRm_rm_Unchecked(src, base, offset); 615 } 616 617 void movl_rm(RegisterID src, int offset, RegisterID base, RegisterID index, int scale) 618 { 619 m_buffer->putByte(OP_MOV_EvGv); 620 modRm_rmsib(src, base, index, scale, offset); 621 } 622 623 void movl_i32r(int imm, RegisterID dst) 624 { 625 m_buffer->putByte(OP_GROUP11_EvIz); 626 modRm_opr(GROUP11_MOV, dst); 627 m_buffer->putInt(imm); 628 } 629 630 void movl_i32m(int imm, int offset, RegisterID base) 631 { 632 m_buffer->ensureSpace(maxInstructionSize); 633 m_buffer->putByteUnchecked(OP_GROUP11_EvIz); 634 modRm_opm_Unchecked(GROUP11_MOV, base, offset); 635 m_buffer->putIntUnchecked(imm); 636 } 637 638 void movl_i32m(int imm, void* addr) 639 { 640 m_buffer->putByte(OP_GROUP11_EvIz); 641 modRm_opm(GROUP11_MOV, addr); 642 m_buffer->putInt(imm); 643 } 644 645 void leal_mr(int offset, RegisterID base, RegisterID dst) 646 { 647 m_buffer->putByte(OP_LEA); 648 modRm_rm(dst, base, offset); 649 } 650 651 void leal_mr(int offset, RegisterID index, int scale, RegisterID dst) 652 { 653 m_buffer->putByte(OP_LEA); 654 modRm_rmsib(dst, X86::noBase, index, scale, offset); 655 } 656 657 void ret() 658 { 659 m_buffer->putByte(OP_RET); 660 } 661 662 void jmp_r(RegisterID dst) 663 { 664 m_buffer->putByte(OP_GROUP5_Ev); 665 modRm_opr(GROUP5_OP_JMPN, dst); 666 } 667 668 void jmp_m(int offset, RegisterID base) 669 { 670 m_buffer->putByte(OP_GROUP5_Ev); 671 modRm_opm(GROUP5_OP_JMPN, base, offset); 672 } 673 674 void movsd_mr(int offset, RegisterID base, XMMRegisterID dst) 675 { 676 m_buffer->putByte(PRE_SSE_F2); 677 m_buffer->putByte(OP_2BYTE_ESCAPE); 678 m_buffer->putByte(OP2_MOVSD_VsdWsd); 679 modRm_rm((RegisterID)dst, base, offset); 680 } 681 682 void xorpd_mr(void* addr, XMMRegisterID dst) 683 { 684 m_buffer->putByte(PRE_SSE_66); 685 m_buffer->putByte(OP_2BYTE_ESCAPE); 686 m_buffer->putByte(OP2_XORPD_VsdWsd); 687 modRm_rm((RegisterID)dst, addr); 688 } 689 690 void movsd_rm(XMMRegisterID src, int offset, RegisterID base) 691 { 692 m_buffer->putByte(PRE_SSE_F2); 693 m_buffer->putByte(OP_2BYTE_ESCAPE); 694 m_buffer->putByte(OP2_MOVSD_WsdVsd); 695 modRm_rm((RegisterID)src, base, offset); 696 } 697 698 void movd_rr(XMMRegisterID src, RegisterID dst) 699 { 700 m_buffer->putByte(PRE_SSE_66); 701 m_buffer->putByte(OP_2BYTE_ESCAPE); 702 m_buffer->putByte(OP2_MOVD_EdVd); 703 modRm_rr((RegisterID)src, dst); 704 } 705 706 void cvtsi2sd_rr(RegisterID src, XMMRegisterID dst) 707 { 708 m_buffer->putByte(PRE_SSE_F2); 709 m_buffer->putByte(OP_2BYTE_ESCAPE); 710 m_buffer->putByte(OP2_CVTSI2SD_VsdEd); 711 modRm_rr((RegisterID)dst, src); 712 } 713 714 void cvttsd2si_rr(XMMRegisterID src, RegisterID dst) 715 { 716 m_buffer->putByte(PRE_SSE_F2); 717 m_buffer->putByte(OP_2BYTE_ESCAPE); 718 m_buffer->putByte(OP2_CVTTSD2SI_GdWsd); 719 modRm_rr(dst, (RegisterID)src); 720 } 721 722 void addsd_mr(int offset, RegisterID base, XMMRegisterID dst) 723 { 724 m_buffer->putByte(PRE_SSE_F2); 725 m_buffer->putByte(OP_2BYTE_ESCAPE); 726 m_buffer->putByte(OP2_ADDSD_VsdWsd); 727 modRm_rm((RegisterID)dst, base, offset); 728 } 729 730 void subsd_mr(int offset, RegisterID base, XMMRegisterID dst) 731 { 732 m_buffer->putByte(PRE_SSE_F2); 733 m_buffer->putByte(OP_2BYTE_ESCAPE); 734 m_buffer->putByte(OP2_SUBSD_VsdWsd); 735 modRm_rm((RegisterID)dst, base, offset); 736 } 737 738 void mulsd_mr(int offset, RegisterID base, XMMRegisterID dst) 739 { 740 m_buffer->putByte(PRE_SSE_F2); 741 m_buffer->putByte(OP_2BYTE_ESCAPE); 742 m_buffer->putByte(OP2_MULSD_VsdWsd); 743 modRm_rm((RegisterID)dst, base, offset); 744 } 745 746 void addsd_rr(XMMRegisterID src, XMMRegisterID dst) 747 { 748 m_buffer->putByte(PRE_SSE_F2); 749 m_buffer->putByte(OP_2BYTE_ESCAPE); 750 m_buffer->putByte(OP2_ADDSD_VsdWsd); 751 modRm_rr((RegisterID)dst, (RegisterID)src); 752 } 753 754 void subsd_rr(XMMRegisterID src, XMMRegisterID dst) 755 { 756 m_buffer->putByte(PRE_SSE_F2); 757 m_buffer->putByte(OP_2BYTE_ESCAPE); 758 m_buffer->putByte(OP2_SUBSD_VsdWsd); 759 modRm_rr((RegisterID)dst, (RegisterID)src); 760 } 761 762 void mulsd_rr(XMMRegisterID src, XMMRegisterID dst) 763 { 764 m_buffer->putByte(PRE_SSE_F2); 765 m_buffer->putByte(OP_2BYTE_ESCAPE); 766 m_buffer->putByte(OP2_MULSD_VsdWsd); 767 modRm_rr((RegisterID)dst, (RegisterID)src); 768 } 769 770 void ucomis_rr(XMMRegisterID src, XMMRegisterID dst) 771 { 772 m_buffer->putByte(PRE_SSE_66); 773 m_buffer->putByte(OP_2BYTE_ESCAPE); 774 m_buffer->putByte(OP2_UCOMISD_VsdWsd); 775 modRm_rr((RegisterID)dst, (RegisterID)src); 776 } 777 778 void pextrw_irr(int whichWord, XMMRegisterID src, RegisterID dst) 779 { 780 m_buffer->putByte(PRE_SSE_66); 781 m_buffer->putByte(OP_2BYTE_ESCAPE); 782 m_buffer->putByte(OP2_PEXTRW_GdUdIb); 783 modRm_rr(dst, (RegisterID)src); 784 m_buffer->putByte(whichWord); 785 } 786 787 JmpSrc call() 789 788 { 790 789 m_buffer->putByte(OP_CALL_rel32); 791 m_buffer->putInt(0); 792 return JmpSrc(m_buffer->size()); 793 } 794 795 JmpSrc emitCall(RegisterID dst)790 m_buffer->putInt(0); // FIXME: make this point to a global label, linked later. 791 return JmpSrc(m_buffer->size()); 792 } 793 794 JmpSrc call(RegisterID dst) 796 795 { 797 796 m_buffer->putByte(OP_GROUP5_Ev); 798 emitModRm_opr(GROUP5_OP_CALLN, dst);797 modRm_opr(GROUP5_OP_CALLN, dst); 799 798 return JmpSrc(m_buffer->size()); 800 799 } … … 813 812 } 814 813 815 JmpSrc emitUnlinkedJmp()814 JmpSrc jmp() 816 815 { 817 816 m_buffer->putByte(OP_JMP_rel32); … … 820 819 } 821 820 822 JmpSrc emitUnlinkedJne()821 JmpSrc jne() 823 822 { 824 823 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 828 827 } 829 828 830 JmpSrc emitUnlinkedJnz()831 { 832 return emitUnlinkedJne();833 } 834 835 JmpSrc emitUnlinkedJe()829 JmpSrc jnz() 830 { 831 return jne(); 832 } 833 834 JmpSrc je() 836 835 { 837 836 m_buffer->ensureSpace(maxInstructionSize); … … 842 841 } 843 842 844 JmpSrc emitUnlinkedJl()843 JmpSrc jl() 845 844 { 846 845 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 850 849 } 851 850 852 JmpSrc emitUnlinkedJb()851 JmpSrc jb() 853 852 { 854 853 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 858 857 } 859 858 860 JmpSrc emitUnlinkedJle()859 JmpSrc jle() 861 860 { 862 861 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 866 865 } 867 866 868 JmpSrc emitUnlinkedJbe()867 JmpSrc jbe() 869 868 { 870 869 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 874 873 } 875 874 876 JmpSrc emitUnlinkedJge()875 JmpSrc jge() 877 876 { 878 877 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 882 881 } 883 882 884 JmpSrc emitUnlinkedJg()883 JmpSrc jg() 885 884 { 886 885 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 890 889 } 891 890 892 JmpSrc emitUnlinkedJa()891 JmpSrc ja() 893 892 { 894 893 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 898 897 } 899 898 900 JmpSrc emitUnlinkedJae()899 JmpSrc jae() 901 900 { 902 901 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 906 905 } 907 906 908 JmpSrc emitUnlinkedJo()907 JmpSrc jo() 909 908 { 910 909 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 914 913 } 915 914 916 JmpSrc emitUnlinkedJp()915 JmpSrc jp() 917 916 { 918 917 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 922 921 } 923 922 924 JmpSrc emitUnlinkedJs()923 JmpSrc js() 925 924 { 926 925 m_buffer->putByte(OP_2BYTE_ESCAPE); … … 930 929 } 931 930 932 void emitPredictionNotTaken()931 void predictNotTaken() 933 932 { 934 933 m_buffer->putByte(PRE_PREDICT_BRANCH_NOT_TAKEN); … … 1004 1003 1005 1004 #if COMPILER(MSVC) 1006 void emitConvertToFastCall()1005 void convertToFastCall() 1007 1006 { 1008 1007 movl_mr(4, X86::esp, X86::eax); … … 1011 1010 } 1012 1011 #else 1013 void emitConvertToFastCall() {}1012 void convertToFastCall() {} 1014 1013 #endif 1015 1014 1016 1015 #if USE(CTI_ARGUMENT) 1017 void emitRestoreArgumentReference()1016 void restoreArgumentReference() 1018 1017 { 1019 1018 #if USE(FAST_CALL_CTI_ARGUMENT) … … 1024 1023 } 1025 1024 1026 void emitRestoreArgumentReferenceForTrampoline()1025 void restoreArgumentReferenceForTrampoline() 1027 1026 { 1028 1027 #if USE(FAST_CALL_CTI_ARGUMENT) … … 1032 1031 } 1033 1032 #else 1034 void emitRestoreArgumentReference() {}1035 void emitRestoreArgumentReferenceForTrampoline() {}1033 void restoreArgumentReference() {} 1034 void restoreArgumentReferenceForTrampoline() {} 1036 1035 #endif 1037 1036 1038 1037 private: 1039 void emitModRm_rr(RegisterID reg, RegisterID rm)1038 void modRm_rr(RegisterID reg, RegisterID rm) 1040 1039 { 1041 1040 m_buffer->ensureSpace(maxInstructionSize); 1042 emitModRm_rr_Unchecked(reg, rm);1043 } 1044 1045 void emitModRm_rr_Unchecked(RegisterID reg, RegisterID rm)1041 modRm_rr_Unchecked(reg, rm); 1042 } 1043 1044 void modRm_rr_Unchecked(RegisterID reg, RegisterID rm) 1046 1045 { 1047 1046 m_buffer->putByteUnchecked(MODRM(3, reg, rm)); 1048 1047 } 1049 1048 1050 void emitModRm_rm(RegisterID reg, void* addr)1049 void modRm_rm(RegisterID reg, void* addr) 1051 1050 { 1052 1051 m_buffer->putByte(MODRM(0, reg, X86::noBase)); … … 1054 1053 } 1055 1054 1056 void emitModRm_rm(RegisterID reg, RegisterID base)1055 void modRm_rm(RegisterID reg, RegisterID base) 1057 1056 { 1058 1057 if (base == X86::esp) { … … 1063 1062 } 1064 1063 1065 void emitModRm_rm_Unchecked(RegisterID reg, RegisterID base, int offset)1064 void modRm_rm_Unchecked(RegisterID reg, RegisterID base, int offset) 1066 1065 { 1067 1066 if (base == X86::esp) { … … 1086 1085 } 1087 1086 1088 void emitModRm_rm(RegisterID reg, RegisterID base, int offset)1087 void modRm_rm(RegisterID reg, RegisterID base, int offset) 1089 1088 { 1090 1089 m_buffer->ensureSpace(maxInstructionSize); 1091 emitModRm_rm_Unchecked(reg, base, offset);1092 } 1093 1094 void emitModRm_rmsib(RegisterID reg, RegisterID base, RegisterID index, int scale)1090 modRm_rm_Unchecked(reg, base, offset); 1091 } 1092 1093 void modRm_rmsib(RegisterID reg, RegisterID base, RegisterID index, int scale) 1095 1094 { 1096 1095 int shift = 0; … … 1102 1101 } 1103 1102 1104 void emitModRm_rmsib(RegisterID reg, RegisterID base, RegisterID index, int scale, int offset)1103 void modRm_rmsib(RegisterID reg, RegisterID base, RegisterID index, int scale, int offset) 1105 1104 { 1106 1105 int shift = 0; … … 1119 1118 } 1120 1119 1121 void emitModRm_opr(OpcodeID opcodeID, RegisterID rm)1120 void modRm_opr(OpcodeID opcodeID, RegisterID rm) 1122 1121 { 1123 1122 m_buffer->ensureSpace(maxInstructionSize); 1124 emitModRm_opr_Unchecked(opcodeID, rm);1125 } 1126 1127 void emitModRm_opr_Unchecked(OpcodeID opcodeID, RegisterID rm)1128 { 1129 emitModRm_rr_Unchecked(static_cast<RegisterID>(opcodeID), rm);1130 } 1131 1132 void emitModRm_opm(OpcodeID opcodeID, RegisterID base)1133 { 1134 emitModRm_rm(static_cast<RegisterID>(opcodeID), base);1135 } 1136 1137 void emitModRm_opm_Unchecked(OpcodeID opcodeID, RegisterID base, int offset)1138 { 1139 emitModRm_rm_Unchecked(static_cast<RegisterID>(opcodeID), base, offset);1140 } 1141 1142 void emitModRm_opm(OpcodeID opcodeID, RegisterID base, int offset)1143 { 1144 emitModRm_rm(static_cast<RegisterID>(opcodeID), base, offset);1145 } 1146 1147 void emitModRm_opm(OpcodeID opcodeID, void* addr)1148 { 1149 emitModRm_rm(static_cast<RegisterID>(opcodeID), addr);1150 } 1151 1152 void emitModRm_opmsib(OpcodeID opcodeID, RegisterID base, RegisterID index, int scale, int offset)1153 { 1154 emitModRm_rmsib(static_cast<RegisterID>(opcodeID), base, index, scale, offset);1123 modRm_opr_Unchecked(opcodeID, rm); 1124 } 1125 1126 void modRm_opr_Unchecked(OpcodeID opcodeID, RegisterID rm) 1127 { 1128 modRm_rr_Unchecked(static_cast<RegisterID>(opcodeID), rm); 1129 } 1130 1131 void modRm_opm(OpcodeID opcodeID, RegisterID base) 1132 { 1133 modRm_rm(static_cast<RegisterID>(opcodeID), base); 1134 } 1135 1136 void modRm_opm_Unchecked(OpcodeID opcodeID, RegisterID base, int offset) 1137 { 1138 modRm_rm_Unchecked(static_cast<RegisterID>(opcodeID), base, offset); 1139 } 1140 1141 void modRm_opm(OpcodeID opcodeID, RegisterID base, int offset) 1142 { 1143 modRm_rm(static_cast<RegisterID>(opcodeID), base, offset); 1144 } 1145 1146 void modRm_opm(OpcodeID opcodeID, void* addr) 1147 { 1148 modRm_rm(static_cast<RegisterID>(opcodeID), addr); 1149 } 1150 1151 void modRm_opmsib(OpcodeID opcodeID, RegisterID base, RegisterID index, int scale, int offset) 1152 { 1153 modRm_rmsib(static_cast<RegisterID>(opcodeID), base, index, scale, offset); 1155 1154 } 1156 1155
Note:
See TracChangeset
for help on using the changeset viewer.