Changeset 47530 in webkit for trunk/JavaScriptCore/assembler/MacroAssemblerARM.h
- Timestamp:
- Aug 19, 2009, 5:02:24 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/MacroAssemblerARM.h
r47186 r47530 65 65 }; 66 66 67 static const RegisterID stackPointerRegister = ARM ::sp;67 static const RegisterID stackPointerRegister = ARMRegisters::sp; 68 68 69 69 static const Scale ScalePtr = TimesFour; … … 76 76 void add32(Imm32 imm, Address address) 77 77 { 78 load32(address, ARM ::S1);79 add32(imm, ARM ::S1);80 store32(ARM ::S1, address);78 load32(address, ARMRegisters::S1); 79 add32(imm, ARMRegisters::S1); 80 store32(ARMRegisters::S1, address); 81 81 } 82 82 83 83 void add32(Imm32 imm, RegisterID dest) 84 84 { 85 m_assembler.adds_r(dest, dest, m_assembler.getImm(imm.m_value, ARM ::S0));85 m_assembler.adds_r(dest, dest, m_assembler.getImm(imm.m_value, ARMRegisters::S0)); 86 86 } 87 87 88 88 void add32(Address src, RegisterID dest) 89 89 { 90 load32(src, ARM ::S1);91 add32(ARM ::S1, dest);90 load32(src, ARMRegisters::S1); 91 add32(ARMRegisters::S1, dest); 92 92 } 93 93 … … 99 99 void and32(Imm32 imm, RegisterID dest) 100 100 { 101 ARMWord w = m_assembler.getImm(imm.m_value, ARM ::S0, true);101 ARMWord w = m_assembler.getImm(imm.m_value, ARMRegisters::S0, true); 102 102 if (w & ARMAssembler::OP2_INV_IMM) 103 103 m_assembler.bics_r(dest, dest, w & ~ARMAssembler::OP2_INV_IMM); … … 119 119 { 120 120 if (src == dest) { 121 move(src, ARM ::S0);122 src = ARM ::S0;121 move(src, ARMRegisters::S0); 122 src = ARMRegisters::S0; 123 123 } 124 124 m_assembler.muls_r(dest, dest, src); … … 127 127 void mul32(Imm32 imm, RegisterID src, RegisterID dest) 128 128 { 129 move(imm, ARM ::S0);130 m_assembler.muls_r(dest, src, ARM ::S0);129 move(imm, ARMRegisters::S0); 130 m_assembler.muls_r(dest, src, ARMRegisters::S0); 131 131 } 132 132 … … 143 143 void or32(Imm32 imm, RegisterID dest) 144 144 { 145 m_assembler.orrs_r(dest, dest, m_assembler.getImm(imm.m_value, ARM ::S0));145 m_assembler.orrs_r(dest, dest, m_assembler.getImm(imm.m_value, ARMRegisters::S0)); 146 146 } 147 147 … … 163 163 void sub32(Imm32 imm, RegisterID dest) 164 164 { 165 m_assembler.subs_r(dest, dest, m_assembler.getImm(imm.m_value, ARM ::S0));165 m_assembler.subs_r(dest, dest, m_assembler.getImm(imm.m_value, ARMRegisters::S0)); 166 166 } 167 167 168 168 void sub32(Imm32 imm, Address address) 169 169 { 170 load32(address, ARM ::S1);171 sub32(imm, ARM ::S1);172 store32(ARM ::S1, address);170 load32(address, ARMRegisters::S1); 171 sub32(imm, ARMRegisters::S1); 172 store32(ARMRegisters::S1, address); 173 173 } 174 174 175 175 void sub32(Address src, RegisterID dest) 176 176 { 177 load32(src, ARM ::S1);178 sub32(ARM ::S1, dest);177 load32(src, ARMRegisters::S1); 178 sub32(ARMRegisters::S1, dest); 179 179 } 180 180 … … 186 186 void xor32(Imm32 imm, RegisterID dest) 187 187 { 188 m_assembler.eors_r(dest, dest, m_assembler.getImm(imm.m_value, ARM ::S0));188 m_assembler.eors_r(dest, dest, m_assembler.getImm(imm.m_value, ARMRegisters::S0)); 189 189 } 190 190 … … 202 202 { 203 203 DataLabel32 dataLabel(this); 204 m_assembler.ldr_un_imm(ARM ::S0, 0);205 m_assembler.dtr_ur(true, dest, address.base, ARM ::S0);204 m_assembler.ldr_un_imm(ARMRegisters::S0, 0); 205 m_assembler.dtr_ur(true, dest, address.base, ARMRegisters::S0); 206 206 return dataLabel; 207 207 } … … 216 216 void load16(BaseIndex address, RegisterID dest) 217 217 { 218 m_assembler.add_r(ARM ::S0, address.base, m_assembler.lsl(address.index, address.scale));218 m_assembler.add_r(ARMRegisters::S0, address.base, m_assembler.lsl(address.index, address.scale)); 219 219 if (address.offset>=0) 220 m_assembler.ldrh_u(dest, ARM ::S0, ARMAssembler::getOp2Byte(address.offset));220 m_assembler.ldrh_u(dest, ARMRegisters::S0, ARMAssembler::getOp2Byte(address.offset)); 221 221 else 222 m_assembler.ldrh_d(dest, ARM ::S0, ARMAssembler::getOp2Byte(-address.offset));222 m_assembler.ldrh_d(dest, ARMRegisters::S0, ARMAssembler::getOp2Byte(-address.offset)); 223 223 } 224 224 … … 226 226 { 227 227 DataLabel32 dataLabel(this); 228 m_assembler.ldr_un_imm(ARM ::S0, 0);229 m_assembler.dtr_ur(false, src, address.base, ARM ::S0);228 m_assembler.ldr_un_imm(ARMRegisters::S0, 0); 229 m_assembler.dtr_ur(false, src, address.base, ARMRegisters::S0); 230 230 return dataLabel; 231 231 } … … 244 244 { 245 245 if (imm.m_isPointer) 246 m_assembler.ldr_un_imm(ARM ::S1, imm.m_value);246 m_assembler.ldr_un_imm(ARMRegisters::S1, imm.m_value); 247 247 else 248 move(imm, ARM ::S1);249 store32(ARM ::S1, address);248 move(imm, ARMRegisters::S1); 249 store32(ARMRegisters::S1, address); 250 250 } 251 251 252 252 void store32(RegisterID src, void* address) 253 253 { 254 m_assembler.ldr_un_imm(ARM ::S0, reinterpret_cast<ARMWord>(address));255 m_assembler.dtr_u(false, src, ARM ::S0, 0);254 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address)); 255 m_assembler.dtr_u(false, src, ARMRegisters::S0, 0); 256 256 } 257 257 258 258 void store32(Imm32 imm, void* address) 259 259 { 260 m_assembler.ldr_un_imm(ARM ::S0, reinterpret_cast<ARMWord>(address));260 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address)); 261 261 if (imm.m_isPointer) 262 m_assembler.ldr_un_imm(ARM ::S1, imm.m_value);262 m_assembler.ldr_un_imm(ARMRegisters::S1, imm.m_value); 263 263 else 264 m_assembler.moveImm(imm.m_value, ARM ::S1);265 m_assembler.dtr_u(false, ARM ::S1, ARM::S0, 0);264 m_assembler.moveImm(imm.m_value, ARMRegisters::S1); 265 m_assembler.dtr_u(false, ARMRegisters::S1, ARMRegisters::S0, 0); 266 266 } 267 267 … … 278 278 void push(Address address) 279 279 { 280 load32(address, ARM ::S1);281 push(ARM ::S1);280 load32(address, ARMRegisters::S1); 281 push(ARMRegisters::S1); 282 282 } 283 283 284 284 void push(Imm32 imm) 285 285 { 286 move(imm, ARM ::S0);287 push(ARM ::S0);286 move(imm, ARMRegisters::S0); 287 push(ARMRegisters::S0); 288 288 } 289 289 … … 308 308 void swap(RegisterID reg1, RegisterID reg2) 309 309 { 310 m_assembler.mov_r(ARM ::S0, reg1);310 m_assembler.mov_r(ARMRegisters::S0, reg1); 311 311 m_assembler.mov_r(reg1, reg2); 312 m_assembler.mov_r(reg2, ARM ::S0);312 m_assembler.mov_r(reg2, ARMRegisters::S0); 313 313 } 314 314 … … 334 334 { 335 335 if (right.m_isPointer) { 336 m_assembler.ldr_un_imm(ARM ::S0, right.m_value);337 m_assembler.cmp_r(left, ARM ::S0);336 m_assembler.ldr_un_imm(ARMRegisters::S0, right.m_value); 337 m_assembler.cmp_r(left, ARMRegisters::S0); 338 338 } else 339 m_assembler.cmp_r(left, m_assembler.getImm(right.m_value, ARM ::S0));339 m_assembler.cmp_r(left, m_assembler.getImm(right.m_value, ARMRegisters::S0)); 340 340 return Jump(m_assembler.jmp(ARMCondition(cond), useConstantPool)); 341 341 } … … 343 343 Jump branch32(Condition cond, RegisterID left, Address right) 344 344 { 345 load32(right, ARM ::S1);346 return branch32(cond, left, ARM ::S1);345 load32(right, ARMRegisters::S1); 346 return branch32(cond, left, ARMRegisters::S1); 347 347 } 348 348 349 349 Jump branch32(Condition cond, Address left, RegisterID right) 350 350 { 351 load32(left, ARM ::S1);352 return branch32(cond, ARM ::S1, right);351 load32(left, ARMRegisters::S1); 352 return branch32(cond, ARMRegisters::S1, right); 353 353 } 354 354 355 355 Jump branch32(Condition cond, Address left, Imm32 right) 356 356 { 357 load32(left, ARM ::S1);358 return branch32(cond, ARM ::S1, right);357 load32(left, ARMRegisters::S1); 358 return branch32(cond, ARMRegisters::S1, right); 359 359 } 360 360 361 361 Jump branch32(Condition cond, BaseIndex left, Imm32 right) 362 362 { 363 load32(left, ARM ::S1);364 return branch32(cond, ARM ::S1, right);363 load32(left, ARMRegisters::S1); 364 return branch32(cond, ARMRegisters::S1, right); 365 365 } 366 366 … … 376 376 Jump branch16(Condition cond, BaseIndex left, Imm32 right) 377 377 { 378 load16(left, ARM ::S0);379 move(right, ARM ::S1);380 m_assembler.cmp_r(ARM ::S0, ARM::S1);378 load16(left, ARMRegisters::S0); 379 move(right, ARMRegisters::S1); 380 m_assembler.cmp_r(ARMRegisters::S0, ARMRegisters::S1); 381 381 return m_assembler.jmp(ARMCondition(cond)); 382 382 } … … 392 392 { 393 393 ASSERT((cond == Zero) || (cond == NonZero)); 394 ARMWord w = m_assembler.getImm(mask.m_value, ARM ::S0, true);394 ARMWord w = m_assembler.getImm(mask.m_value, ARMRegisters::S0, true); 395 395 if (w & ARMAssembler::OP2_INV_IMM) 396 m_assembler.bics_r(ARM ::S0, reg, w & ~ARMAssembler::OP2_INV_IMM);396 m_assembler.bics_r(ARMRegisters::S0, reg, w & ~ARMAssembler::OP2_INV_IMM); 397 397 else 398 398 m_assembler.tst_r(reg, w); … … 402 402 Jump branchTest32(Condition cond, Address address, Imm32 mask = Imm32(-1)) 403 403 { 404 load32(address, ARM ::S1);405 return branchTest32(cond, ARM ::S1, mask);404 load32(address, ARMRegisters::S1); 405 return branchTest32(cond, ARMRegisters::S1, mask); 406 406 } 407 407 408 408 Jump branchTest32(Condition cond, BaseIndex address, Imm32 mask = Imm32(-1)) 409 409 { 410 load32(address, ARM ::S1);411 return branchTest32(cond, ARM ::S1, mask);410 load32(address, ARMRegisters::S1); 411 return branchTest32(cond, ARMRegisters::S1, mask); 412 412 } 413 413 … … 419 419 void jump(RegisterID target) 420 420 { 421 move(target, ARM ::pc);421 move(target, ARMRegisters::pc); 422 422 } 423 423 424 424 void jump(Address address) 425 425 { 426 load32(address, ARM ::pc);426 load32(address, ARMRegisters::pc); 427 427 } 428 428 … … 444 444 { 445 445 if (src1 == dest) { 446 move(src1, ARM ::S0);447 src1 = ARM ::S0;446 move(src1, ARMRegisters::S0); 447 src1 = ARMRegisters::S0; 448 448 } 449 m_assembler.mull_r(ARM ::S1, dest, src2, src1);450 m_assembler.cmp_r(ARM ::S1, m_assembler.asr(dest, 31));449 m_assembler.mull_r(ARMRegisters::S1, dest, src2, src1); 450 m_assembler.cmp_r(ARMRegisters::S1, m_assembler.asr(dest, 31)); 451 451 } 452 452 … … 467 467 ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); 468 468 if (cond == Overflow) { 469 move(imm, ARM ::S0);470 mull32(ARM ::S0, src, dest);469 move(imm, ARMRegisters::S0); 470 mull32(ARMRegisters::S0, src, dest); 471 471 cond = NonZero; 472 472 } … … 504 504 { 505 505 prepareCall(); 506 move(ARM ::pc, target);506 move(ARMRegisters::pc, target); 507 507 JmpSrc jmpSrc; 508 508 return Call(jmpSrc, Call::None); … … 516 516 void ret() 517 517 { 518 pop(ARM ::pc);518 pop(ARMRegisters::pc); 519 519 } 520 520 … … 528 528 void set32(Condition cond, RegisterID left, Imm32 right, RegisterID dest) 529 529 { 530 m_assembler.cmp_r(left, m_assembler.getImm(right.m_value, ARM ::S0));530 m_assembler.cmp_r(left, m_assembler.getImm(right.m_value, ARMRegisters::S0)); 531 531 m_assembler.mov_r(dest, ARMAssembler::getOp2(0)); 532 532 m_assembler.mov_r(dest, ARMAssembler::getOp2(1), ARMCondition(cond)); … … 535 535 void setTest32(Condition cond, Address address, Imm32 mask, RegisterID dest) 536 536 { 537 load32(address, ARM ::S1);537 load32(address, ARMRegisters::S1); 538 538 if (mask.m_value == -1) 539 m_assembler.cmp_r(0, ARM ::S1);539 m_assembler.cmp_r(0, ARMRegisters::S1); 540 540 else 541 m_assembler.tst_r(ARM ::S1, m_assembler.getImm(mask.m_value, ARM::S0));541 m_assembler.tst_r(ARMRegisters::S1, m_assembler.getImm(mask.m_value, ARMRegisters::S0)); 542 542 m_assembler.mov_r(dest, ARMAssembler::getOp2(0)); 543 543 m_assembler.mov_r(dest, ARMAssembler::getOp2(1), ARMCondition(cond)); … … 546 546 void add32(Imm32 imm, RegisterID src, RegisterID dest) 547 547 { 548 m_assembler.add_r(dest, src, m_assembler.getImm(imm.m_value, ARM ::S0));548 m_assembler.add_r(dest, src, m_assembler.getImm(imm.m_value, ARMRegisters::S0)); 549 549 } 550 550 551 551 void add32(Imm32 imm, AbsoluteAddress address) 552 552 { 553 m_assembler.ldr_un_imm(ARM ::S1, reinterpret_cast<ARMWord>(address.m_ptr));554 m_assembler.dtr_u(true, ARM ::S1, ARM::S1, 0);555 add32(imm, ARM ::S1);556 m_assembler.ldr_un_imm(ARM ::S0, reinterpret_cast<ARMWord>(address.m_ptr));557 m_assembler.dtr_u(false, ARM ::S1, ARM::S0, 0);553 m_assembler.ldr_un_imm(ARMRegisters::S1, reinterpret_cast<ARMWord>(address.m_ptr)); 554 m_assembler.dtr_u(true, ARMRegisters::S1, ARMRegisters::S1, 0); 555 add32(imm, ARMRegisters::S1); 556 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address.m_ptr)); 557 m_assembler.dtr_u(false, ARMRegisters::S1, ARMRegisters::S0, 0); 558 558 } 559 559 560 560 void sub32(Imm32 imm, AbsoluteAddress address) 561 561 { 562 m_assembler.ldr_un_imm(ARM ::S1, reinterpret_cast<ARMWord>(address.m_ptr));563 m_assembler.dtr_u(true, ARM ::S1, ARM::S1, 0);564 sub32(imm, ARM ::S1);565 m_assembler.ldr_un_imm(ARM ::S0, reinterpret_cast<ARMWord>(address.m_ptr));566 m_assembler.dtr_u(false, ARM ::S1, ARM::S0, 0);562 m_assembler.ldr_un_imm(ARMRegisters::S1, reinterpret_cast<ARMWord>(address.m_ptr)); 563 m_assembler.dtr_u(true, ARMRegisters::S1, ARMRegisters::S1, 0); 564 sub32(imm, ARMRegisters::S1); 565 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address.m_ptr)); 566 m_assembler.dtr_u(false, ARMRegisters::S1, ARMRegisters::S0, 0); 567 567 } 568 568 569 569 void load32(void* address, RegisterID dest) 570 570 { 571 m_assembler.ldr_un_imm(ARM ::S0, reinterpret_cast<ARMWord>(address));572 m_assembler.dtr_u(true, dest, ARM ::S0, 0);571 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address)); 572 m_assembler.dtr_u(true, dest, ARMRegisters::S0, 0); 573 573 } 574 574 575 575 Jump branch32(Condition cond, AbsoluteAddress left, RegisterID right) 576 576 { 577 load32(left.m_ptr, ARM ::S1);578 return branch32(cond, ARM ::S1, right);577 load32(left.m_ptr, ARMRegisters::S1); 578 return branch32(cond, ARMRegisters::S1, right); 579 579 } 580 580 581 581 Jump branch32(Condition cond, AbsoluteAddress left, Imm32 right) 582 582 { 583 load32(left.m_ptr, ARM ::S1);584 return branch32(cond, ARM ::S1, right);583 load32(left.m_ptr, ARMRegisters::S1); 584 return branch32(cond, ARMRegisters::S1, right); 585 585 } 586 586 … … 610 610 Jump branchPtrWithPatch(Condition cond, RegisterID left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0)) 611 611 { 612 dataLabel = moveWithPatch(initialRightValue, ARM ::S1);613 Jump jump = branch32(cond, left, ARM ::S1, true);612 dataLabel = moveWithPatch(initialRightValue, ARMRegisters::S1); 613 Jump jump = branch32(cond, left, ARMRegisters::S1, true); 614 614 return jump; 615 615 } … … 617 617 Jump branchPtrWithPatch(Condition cond, Address left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0)) 618 618 { 619 load32(left, ARM ::S1);620 dataLabel = moveWithPatch(initialRightValue, ARM ::S0);621 Jump jump = branch32(cond, ARM ::S0, ARM::S1, true);619 load32(left, ARMRegisters::S1); 620 dataLabel = moveWithPatch(initialRightValue, ARMRegisters::S0); 621 Jump jump = branch32(cond, ARMRegisters::S0, ARMRegisters::S1, true); 622 622 return jump; 623 623 } … … 625 625 DataLabelPtr storePtrWithPatch(ImmPtr initialValue, ImplicitAddress address) 626 626 { 627 DataLabelPtr dataLabel = moveWithPatch(initialValue, ARM ::S1);628 store32(ARM ::S1, address);627 DataLabelPtr dataLabel = moveWithPatch(initialValue, ARMRegisters::S1); 628 store32(ARMRegisters::S1, address); 629 629 return dataLabel; 630 630 } … … 664 664 void addDouble(Address src, FPRegisterID dest) 665 665 { 666 loadDouble(src, ARM ::SD0);667 addDouble(ARM ::SD0, dest);666 loadDouble(src, ARMRegisters::SD0); 667 addDouble(ARMRegisters::SD0, dest); 668 668 } 669 669 … … 675 675 void subDouble(Address src, FPRegisterID dest) 676 676 { 677 loadDouble(src, ARM ::SD0);678 subDouble(ARM ::SD0, dest);677 loadDouble(src, ARMRegisters::SD0); 678 subDouble(ARMRegisters::SD0, dest); 679 679 } 680 680 … … 686 686 void mulDouble(Address src, FPRegisterID dest) 687 687 { 688 loadDouble(src, ARM ::SD0);689 mulDouble(ARM ::SD0, dest);688 loadDouble(src, ARMRegisters::SD0); 689 mulDouble(ARMRegisters::SD0, dest); 690 690 } 691 691 … … 736 736 737 737 // S0 might be used for parameter passing 738 m_assembler.add_r(ARM ::S1, ARM::pc, ARMAssembler::OP2_IMM | 0x4);739 m_assembler.push_r(ARM ::S1);738 m_assembler.add_r(ARMRegisters::S1, ARMRegisters::pc, ARMAssembler::OP2_IMM | 0x4); 739 m_assembler.push_r(ARMRegisters::S1); 740 740 } 741 741 742 742 void call32(RegisterID base, int32_t offset) 743 743 { 744 if (base == ARM ::sp)744 if (base == ARMRegisters::sp) 745 745 offset += 4; 746 746 … … 748 748 if (offset <= 0xfff) { 749 749 prepareCall(); 750 m_assembler.dtr_u(true, ARM ::pc, base, offset);750 m_assembler.dtr_u(true, ARMRegisters::pc, base, offset); 751 751 } else if (offset <= 0xfffff) { 752 m_assembler.add_r(ARM ::S0, base, ARMAssembler::OP2_IMM | (offset >> 12) | (10 << 8));752 m_assembler.add_r(ARMRegisters::S0, base, ARMAssembler::OP2_IMM | (offset >> 12) | (10 << 8)); 753 753 prepareCall(); 754 m_assembler.dtr_u(true, ARM ::pc, ARM::S0, offset & 0xfff);754 m_assembler.dtr_u(true, ARMRegisters::pc, ARMRegisters::S0, offset & 0xfff); 755 755 } else { 756 ARMWord reg = m_assembler.getImm(offset, ARM ::S0);756 ARMWord reg = m_assembler.getImm(offset, ARMRegisters::S0); 757 757 prepareCall(); 758 m_assembler.dtr_ur(true, ARM ::pc, base, reg);758 m_assembler.dtr_ur(true, ARMRegisters::pc, base, reg); 759 759 } 760 760 } else { … … 762 762 if (offset <= 0xfff) { 763 763 prepareCall(); 764 m_assembler.dtr_d(true, ARM ::pc, base, offset);764 m_assembler.dtr_d(true, ARMRegisters::pc, base, offset); 765 765 } else if (offset <= 0xfffff) { 766 m_assembler.sub_r(ARM ::S0, base, ARMAssembler::OP2_IMM | (offset >> 12) | (10 << 8));766 m_assembler.sub_r(ARMRegisters::S0, base, ARMAssembler::OP2_IMM | (offset >> 12) | (10 << 8)); 767 767 prepareCall(); 768 m_assembler.dtr_d(true, ARM ::pc, ARM::S0, offset & 0xfff);768 m_assembler.dtr_d(true, ARMRegisters::pc, ARMRegisters::S0, offset & 0xfff); 769 769 } else { 770 ARMWord reg = m_assembler.getImm(offset, ARM ::S0);770 ARMWord reg = m_assembler.getImm(offset, ARMRegisters::S0); 771 771 prepareCall(); 772 m_assembler.dtr_dr(true, ARM ::pc, base, reg);772 m_assembler.dtr_dr(true, ARMRegisters::pc, base, reg); 773 773 } 774 774 }
Note:
See TracChangeset
for help on using the changeset viewer.