Changeset 39428 in webkit for trunk/JavaScriptCore/assembler/MacroAssembler.h
- Timestamp:
- Dec 21, 2008, 5:00:07 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/MacroAssembler.h
r39422 r39428 169 169 } 170 170 171 #if !PLATFORM(X86_64)172 171 static void repatch(void* address, void* value) 173 172 { 174 X86Assembler::repatchImmediate(reinterpret_cast<intptr_t>(address), reinterpret_cast<uint32_t>(value)); 175 } 176 #endif 177 173 X86Assembler::repatchPointer(reinterpret_cast<intptr_t>(address), reinterpret_cast<intptr_t>(value)); 174 } 175 178 176 private: 179 177 X86Assembler::JmpDst m_label; … … 198 196 } 199 197 200 #if !PLATFORM(X86_64)201 198 static void repatch(void* address, int32_t value) 202 199 { 203 200 X86Assembler::repatchImmediate(reinterpret_cast<intptr_t>(address), value); 204 201 } 205 #endif206 202 207 203 private: … … 383 379 } 384 380 381 void* addressOf(DataLabelPtr label) 382 { 383 return X86Assembler::getRelocatedAddress(m_code, label.m_label); 384 } 385 386 void* addressOf(DataLabel32 label) 387 { 388 return X86Assembler::getRelocatedAddress(m_code, label.m_label); 389 } 390 385 391 void setPtr(DataLabelPtr label, void* value) 386 392 { … … 449 455 } 450 456 457 void add32(Imm32 imm, Address address) 458 { 459 m_assembler.addl_im(imm.m_value, address.offset, address.base); 460 } 461 451 462 void add32(Imm32 imm, RegisterID dest) 452 463 { … … 454 465 } 455 466 456 #if !PLATFORM(X86_64)457 467 void add32(Imm32 imm, AbsoluteAddress address) 458 468 { 469 #if PLATFORM(X86_64) 470 move(ImmPtr(address.m_ptr), scratchRegister); 471 add32(imm, Address(scratchRegister)); 472 #else 459 473 m_assembler.addl_im(imm.m_value, address.m_ptr); 460 } 461 #endif 474 #endif 475 } 462 476 463 477 void add32(Address src, RegisterID dest) … … 596 610 } 597 611 598 #if !PLATFORM(X86_64) 612 void sub32(Imm32 imm, Address address) 613 { 614 m_assembler.subl_im(imm.m_value, address.offset, address.base); 615 } 616 599 617 void sub32(Imm32 imm, AbsoluteAddress address) 600 618 { 619 #if PLATFORM(X86_64) 620 move(ImmPtr(address.m_ptr), scratchRegister); 621 sub32(imm, Address(scratchRegister)); 622 #else 601 623 m_assembler.subl_im(imm.m_value, address.m_ptr); 602 } 603 #endif 604 624 #endif 625 } 626 605 627 void sub32(Address src, RegisterID dest) 606 628 { … … 644 666 } 645 667 646 #if !PLATFORM(X86_64) 647 DataLabel32 loadPtrWithAddressRepatch(Address address, RegisterID dest) 648 { 668 DataLabel32 loadPtrWithAddressOffsetRepatch(Address address, RegisterID dest) 669 { 670 #if PLATFORM(X86_64) 671 m_assembler.movq_mr_disp32(address.offset, address.base, dest); 672 return DataLabel32(this); 673 #else 649 674 m_assembler.movl_mr_disp32(address.offset, address.base, dest); 650 675 return DataLabel32(this); 651 } 652 #endif 676 #endif 677 } 653 678 654 679 void loadPtr(BaseIndex address, RegisterID dest) … … 715 740 } 716 741 717 #if !PLATFORM(X86_64) 718 DataLabel32 storePtrWithAddressRepatch(RegisterID src, Address address) 719 { 742 DataLabel32 storePtrWithAddressOffsetRepatch(RegisterID src, Address address) 743 { 744 #if PLATFORM(X86_64) 745 m_assembler.movq_rm_disp32(src, address.offset, address.base); 746 return DataLabel32(this); 747 #else 720 748 m_assembler.movl_rm_disp32(src, address.offset, address.base); 721 749 return DataLabel32(this); 722 } 723 #endif 750 #endif 751 } 724 752 725 753 void storePtr(RegisterID src, BaseIndex address) … … 1025 1053 } 1026 1054 1055 Jump jePtr(RegisterID reg, Address address) 1056 { 1057 #if PLATFORM(X86_64) 1058 m_assembler.cmpq_rm(reg, address.offset, address.base); 1059 #else 1060 m_assembler.cmpl_rm(reg, address.offset, address.base); 1061 #endif 1062 return Jump(m_assembler.je()); 1063 } 1064 1027 1065 Jump jePtr(RegisterID reg, ImmPtr imm) 1028 1066 { … … 1035 1073 } 1036 1074 1075 Jump jePtr(Address address, ImmPtr imm) 1076 { 1077 #if PLATFORM(X86_64) 1078 move(imm, scratchRegister); 1079 return jePtr(scratchRegister, address); 1080 #else 1081 return je32(address, Imm32(reinterpret_cast<int32_t>(imm.m_value))); 1082 #endif 1083 } 1084 1037 1085 Jump je32(RegisterID op1, RegisterID op2) 1038 1086 { … … 1133 1181 } 1134 1182 1183 Jump jnePtr(RegisterID reg, AbsoluteAddress address) 1184 { 1185 #if PLATFORM(X86_64) 1186 move(ImmPtr(address.m_ptr), scratchRegister); 1187 return jnePtr(reg, Address(scratchRegister)); 1188 #else 1189 m_assembler.cmpl_rm(reg, address.m_ptr); 1190 return Jump(m_assembler.jne()); 1191 #endif 1192 } 1193 1135 1194 Jump jnePtr(RegisterID reg, ImmPtr imm) 1136 1195 { … … 1161 1220 #endif 1162 1221 1163 #if !PLATFORM(X86_64) 1222 Jump jnePtrWithRepatch(RegisterID reg, DataLabelPtr& dataLabel, ImmPtr initialValue = ImmPtr(0)) 1223 { 1224 #if PLATFORM(X86_64) 1225 m_assembler.movq_i64r(reinterpret_cast<int64_t>(initialValue.m_value), scratchRegister); 1226 dataLabel = DataLabelPtr(this); 1227 return jnePtr(scratchRegister, reg); 1228 #else 1229 m_assembler.cmpl_ir_force32(reinterpret_cast<int32_t>(initialValue.m_value), reg); 1230 dataLabel = DataLabelPtr(this); 1231 return Jump(m_assembler.jne()); 1232 #endif 1233 } 1234 1164 1235 Jump jnePtrWithRepatch(Address address, DataLabelPtr& dataLabel, ImmPtr initialValue = ImmPtr(0)) 1165 1236 { 1237 #if PLATFORM(X86_64) 1238 m_assembler.movq_i64r(reinterpret_cast<int64_t>(initialValue.m_value), scratchRegister); 1239 dataLabel = DataLabelPtr(this); 1240 return jnePtr(scratchRegister, address); 1241 #else 1166 1242 m_assembler.cmpl_im_force32(reinterpret_cast<int32_t>(initialValue.m_value), address.offset, address.base); 1167 1243 dataLabel = DataLabelPtr(this); 1168 1244 return Jump(m_assembler.jne()); 1169 } 1170 #endif 1245 #endif 1246 } 1171 1247 1172 1248 Jump jne32(RegisterID op1, RegisterID op2) … … 1462 1538 } 1463 1539 1540 ptrdiff_t differenceBetween(DataLabelPtr from, Jump to) 1541 { 1542 return X86Assembler::getDifferenceBetweenLabels(from.m_label, to.m_jmp); 1543 } 1544 1464 1545 void ret() 1465 1546 {
Note:
See TracChangeset
for help on using the changeset viewer.