Changeset 47530 in webkit for trunk/JavaScriptCore/assembler/ARMAssembler.h
- Timestamp:
- Aug 19, 2009, 5:02:24 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/ARMAssembler.h
r47265 r47530 36 36 namespace JSC { 37 37 38 typedef uint32_t ARMWord;39 40 namespace ARM{41 typedef enum {42 r0 = 0,43 r1,44 r2,45 r3,46 S0 = r3,47 r4,48 r5,49 r6,50 r7,51 r8,52 S1 = r8,53 r9,54 r10,55 r11,56 r12,57 r13,58 sp = r13,59 r14,60 lr = r14,61 r15,62 pc = r1563 } RegisterID;64 65 typedef enum {66 d0,67 d1,68 d2,69 d3,70 SD0 = d371 } FPRegisterID;72 73 } // namespace ARM 38 typedef uint32_t ARMWord; 39 40 namespace ARMRegisters { 41 typedef enum { 42 r0 = 0, 43 r1, 44 r2, 45 r3, 46 S0 = r3, 47 r4, 48 r5, 49 r6, 50 r7, 51 r8, 52 S1 = r8, 53 r9, 54 r10, 55 r11, 56 r12, 57 r13, 58 sp = r13, 59 r14, 60 lr = r14, 61 r15, 62 pc = r15 63 } RegisterID; 64 65 typedef enum { 66 d0, 67 d1, 68 d2, 69 d3, 70 SD0 = d3 71 } FPRegisterID; 72 73 } // namespace ARMRegisters 74 74 75 75 class ARMAssembler { 76 76 public: 77 typedef ARM ::RegisterID RegisterID;78 typedef ARM ::FPRegisterID FPRegisterID;77 typedef ARMRegisters::RegisterID RegisterID; 78 typedef ARMRegisters::FPRegisterID FPRegisterID; 79 79 typedef AssemblerBufferWithConstantPool<2048, 4, 4, ARMAssembler> ARMBuffer; 80 80 typedef SegmentedVector<int, 64> Jumps; … … 331 331 void mov_r(int rd, ARMWord op2, Condition cc = AL) 332 332 { 333 emitInst(static_cast<ARMWord>(cc) | MOV, rd, ARM ::r0, op2);333 emitInst(static_cast<ARMWord>(cc) | MOV, rd, ARMRegisters::r0, op2); 334 334 } 335 335 336 336 void movs_r(int rd, ARMWord op2, Condition cc = AL) 337 337 { 338 emitInst(static_cast<ARMWord>(cc) | MOV | SET_CC, rd, ARM ::r0, op2);338 emitInst(static_cast<ARMWord>(cc) | MOV | SET_CC, rd, ARMRegisters::r0, op2); 339 339 } 340 340 … … 351 351 void mvn_r(int rd, ARMWord op2, Condition cc = AL) 352 352 { 353 emitInst(static_cast<ARMWord>(cc) | MVN, rd, ARM ::r0, op2);353 emitInst(static_cast<ARMWord>(cc) | MVN, rd, ARMRegisters::r0, op2); 354 354 } 355 355 356 356 void mvns_r(int rd, ARMWord op2, Condition cc = AL) 357 357 { 358 emitInst(static_cast<ARMWord>(cc) | MVN | SET_CC, rd, ARM ::r0, op2);358 emitInst(static_cast<ARMWord>(cc) | MVN | SET_CC, rd, ARMRegisters::r0, op2); 359 359 } 360 360 … … 396 396 void ldr_imm(int rd, ARMWord imm, Condition cc = AL) 397 397 { 398 m_buffer.putIntWithConstantInt(static_cast<ARMWord>(cc) | DTR | DT_LOAD | DT_UP | RN(ARM ::pc) | RD(rd), imm, true);398 m_buffer.putIntWithConstantInt(static_cast<ARMWord>(cc) | DTR | DT_LOAD | DT_UP | RN(ARMRegisters::pc) | RD(rd), imm, true); 399 399 } 400 400 401 401 void ldr_un_imm(int rd, ARMWord imm, Condition cc = AL) 402 402 { 403 m_buffer.putIntWithConstantInt(static_cast<ARMWord>(cc) | DTR | DT_LOAD | DT_UP | RN(ARM ::pc) | RD(rd), imm);403 m_buffer.putIntWithConstantInt(static_cast<ARMWord>(cc) | DTR | DT_LOAD | DT_UP | RN(ARMRegisters::pc) | RD(rd), imm); 404 404 } 405 405 … … 459 459 { 460 460 ASSERT(ARMWord(reg) <= 0xf); 461 m_buffer.putInt(cc | DTR | DT_WB | RN(ARM ::sp) | RD(reg) | 0x4);461 m_buffer.putInt(cc | DTR | DT_WB | RN(ARMRegisters::sp) | RD(reg) | 0x4); 462 462 } 463 463 … … 465 465 { 466 466 ASSERT(ARMWord(reg) <= 0xf); 467 m_buffer.putInt(cc | (DTR ^ DT_PRE) | DT_LOAD | DT_UP | RN(ARM ::sp) | RD(reg) | 0x4);467 m_buffer.putInt(cc | (DTR ^ DT_PRE) | DT_LOAD | DT_UP | RN(ARMRegisters::sp) | RD(reg) | 0x4); 468 468 } 469 469 470 470 inline void poke_r(int reg, Condition cc = AL) 471 471 { 472 dtr_d(false, ARM ::sp, 0, reg, cc);472 dtr_d(false, ARMRegisters::sp, 0, reg, cc); 473 473 } 474 474 475 475 inline void peek_r(int reg, Condition cc = AL) 476 476 { 477 dtr_u(true, reg, ARM ::sp, 0, cc);477 dtr_u(true, reg, ARMRegisters::sp, 0, cc); 478 478 } 479 479 … … 506 506 #else 507 507 // Cannot access to Zero memory address 508 dtr_dr(true, ARM ::S0, ARM::S0, ARM::S0);508 dtr_dr(true, ARMRegisters::S0, ARMRegisters::S0, ARMRegisters::S0); 509 509 #endif 510 510 } … … 512 512 static ARMWord lsl(int reg, ARMWord value) 513 513 { 514 ASSERT(reg <= ARM ::pc);514 ASSERT(reg <= ARMRegisters::pc); 515 515 ASSERT(value <= 0x1f); 516 516 return reg | (value << 7) | 0x00; … … 519 519 static ARMWord lsr(int reg, ARMWord value) 520 520 { 521 ASSERT(reg <= ARM ::pc);521 ASSERT(reg <= ARMRegisters::pc); 522 522 ASSERT(value <= 0x1f); 523 523 return reg | (value << 7) | 0x20; … … 526 526 static ARMWord asr(int reg, ARMWord value) 527 527 { 528 ASSERT(reg <= ARM ::pc);528 ASSERT(reg <= ARMRegisters::pc); 529 529 ASSERT(value <= 0x1f); 530 530 return reg | (value << 7) | 0x40; … … 533 533 static ARMWord lsl_r(int reg, int shiftReg) 534 534 { 535 ASSERT(reg <= ARM ::pc);536 ASSERT(shiftReg <= ARM ::pc);535 ASSERT(reg <= ARMRegisters::pc); 536 ASSERT(shiftReg <= ARMRegisters::pc); 537 537 return reg | (shiftReg << 8) | 0x10; 538 538 } … … 540 540 static ARMWord lsr_r(int reg, int shiftReg) 541 541 { 542 ASSERT(reg <= ARM ::pc);543 ASSERT(shiftReg <= ARM ::pc);542 ASSERT(reg <= ARMRegisters::pc); 543 ASSERT(shiftReg <= ARMRegisters::pc); 544 544 return reg | (shiftReg << 8) | 0x30; 545 545 } … … 547 547 static ARMWord asr_r(int reg, int shiftReg) 548 548 { 549 ASSERT(reg <= ARM ::pc);550 ASSERT(shiftReg <= ARM ::pc);549 ASSERT(reg <= ARMRegisters::pc); 550 ASSERT(shiftReg <= ARMRegisters::pc); 551 551 return reg | (shiftReg << 8) | 0x50; 552 552 } … … 577 577 { 578 578 while (!m_buffer.isAligned(alignment)) 579 mov_r(ARM ::r0, ARM::r0);579 mov_r(ARMRegisters::r0, ARMRegisters::r0); 580 580 581 581 return label(); … … 586 586 ensureSpace(sizeof(ARMWord), sizeof(ARMWord)); 587 587 int s = m_buffer.uncheckedSize(); 588 ldr_un_imm(ARM ::pc, 0xffffffff, cc);588 ldr_un_imm(ARMRegisters::pc, 0xffffffff, cc); 589 589 m_jumps.append(s | (useConstantPool & 0x1)); 590 590 return JmpSrc(s); … … 730 730 ARMWord RM(int reg) 731 731 { 732 ASSERT(reg <= ARM ::pc);732 ASSERT(reg <= ARMRegisters::pc); 733 733 return reg; 734 734 } … … 736 736 ARMWord RS(int reg) 737 737 { 738 ASSERT(reg <= ARM ::pc);738 ASSERT(reg <= ARMRegisters::pc); 739 739 return reg << 8; 740 740 } … … 742 742 ARMWord RD(int reg) 743 743 { 744 ASSERT(reg <= ARM ::pc);744 ASSERT(reg <= ARMRegisters::pc); 745 745 return reg << 12; 746 746 } … … 748 748 ARMWord RN(int reg) 749 749 { 750 ASSERT(reg <= ARM ::pc);750 ASSERT(reg <= ARMRegisters::pc); 751 751 return reg << 16; 752 752 }
Note:
See TracChangeset
for help on using the changeset viewer.