Changeset 47530 in webkit for trunk/JavaScriptCore/assembler
- Timestamp:
- Aug 19, 2009, 5:02:24 PM (16 years ago)
- Location:
- trunk/JavaScriptCore/assembler
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/ARMAssembler.cpp
r47186 r47530 292 292 dtr_u(isLoad, srcDst, base, offset); 293 293 else if (offset <= 0xfffff) { 294 add_r(ARM ::S0, base, OP2_IMM | (offset >> 12) | (10 << 8));295 dtr_u(isLoad, srcDst, ARM ::S0, offset & 0xfff);294 add_r(ARMRegisters::S0, base, OP2_IMM | (offset >> 12) | (10 << 8)); 295 dtr_u(isLoad, srcDst, ARMRegisters::S0, offset & 0xfff); 296 296 } else { 297 ARMWord reg = getImm(offset, ARM ::S0);297 ARMWord reg = getImm(offset, ARMRegisters::S0); 298 298 dtr_ur(isLoad, srcDst, base, reg); 299 299 } … … 303 303 dtr_d(isLoad, srcDst, base, offset); 304 304 else if (offset <= 0xfffff) { 305 sub_r(ARM ::S0, base, OP2_IMM | (offset >> 12) | (10 << 8));306 dtr_d(isLoad, srcDst, ARM ::S0, offset & 0xfff);305 sub_r(ARMRegisters::S0, base, OP2_IMM | (offset >> 12) | (10 << 8)); 306 dtr_d(isLoad, srcDst, ARMRegisters::S0, offset & 0xfff); 307 307 } else { 308 ARMWord reg = getImm(offset, ARM ::S0);308 ARMWord reg = getImm(offset, ARMRegisters::S0); 309 309 dtr_dr(isLoad, srcDst, base, reg); 310 310 } … … 320 320 321 321 if (offset >= 0 && offset <= 0xfff) { 322 add_r(ARM ::S0, base, op2);323 dtr_u(isLoad, srcDst, ARM ::S0, offset);322 add_r(ARMRegisters::S0, base, op2); 323 dtr_u(isLoad, srcDst, ARMRegisters::S0, offset); 324 324 return; 325 325 } 326 326 if (offset <= 0 && offset >= -0xfff) { 327 add_r(ARM ::S0, base, op2);328 dtr_d(isLoad, srcDst, ARM ::S0, -offset);329 return; 330 } 331 332 ldr_un_imm(ARM ::S0, offset);333 add_r(ARM ::S0, ARM::S0, op2);334 dtr_ur(isLoad, srcDst, base, ARM ::S0);327 add_r(ARMRegisters::S0, base, op2); 328 dtr_d(isLoad, srcDst, ARMRegisters::S0, -offset); 329 return; 330 } 331 332 ldr_un_imm(ARMRegisters::S0, offset); 333 add_r(ARMRegisters::S0, ARMRegisters::S0, op2); 334 dtr_ur(isLoad, srcDst, base, ARMRegisters::S0); 335 335 } 336 336 … … 343 343 } 344 344 if (offset <= 0x3ffff && offset >= 0) { 345 add_r(ARM ::S0, base, OP2_IMM | (offset >> 10) | (11 << 8));346 fdtr_u(isLoad, srcDst, ARM ::S0, (offset >> 2) & 0xff);345 add_r(ARMRegisters::S0, base, OP2_IMM | (offset >> 10) | (11 << 8)); 346 fdtr_u(isLoad, srcDst, ARMRegisters::S0, (offset >> 2) & 0xff); 347 347 return; 348 348 } … … 354 354 } 355 355 if (offset <= 0x3ffff && offset >= 0) { 356 sub_r(ARM ::S0, base, OP2_IMM | (offset >> 10) | (11 << 8));357 fdtr_d(isLoad, srcDst, ARM ::S0, (offset >> 2) & 0xff);356 sub_r(ARMRegisters::S0, base, OP2_IMM | (offset >> 10) | (11 << 8)); 357 fdtr_d(isLoad, srcDst, ARMRegisters::S0, (offset >> 2) & 0xff); 358 358 return; 359 359 } … … 361 361 } 362 362 363 ldr_un_imm(ARM ::S0, offset);364 add_r(ARM ::S0, ARM::S0, base);365 fdtr_u(isLoad, srcDst, ARM ::S0, 0);363 ldr_un_imm(ARMRegisters::S0, offset); 364 add_r(ARMRegisters::S0, ARMRegisters::S0, base); 365 fdtr_u(isLoad, srcDst, ARMRegisters::S0, 0); 366 366 } 367 367 -
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 } -
trunk/JavaScriptCore/assembler/ARMv7Assembler.h
r47186 r47530 38 38 namespace JSC { 39 39 40 namespace ARM {40 namespace ARMRegisters { 41 41 typedef enum { 42 42 r0, … … 408 408 class ARMv7Assembler { 409 409 public: 410 typedef ARM ::RegisterID RegisterID;411 typedef ARM ::FPRegisterID FPRegisterID;410 typedef ARMRegisters::RegisterID RegisterID; 411 typedef ARMRegisters::FPRegisterID FPRegisterID; 412 412 413 413 // (HS, LO, HI, LS) -> (AE, B, A, BE) … … 481 481 bool BadReg(RegisterID reg) 482 482 { 483 return (reg == ARM ::sp) || (reg == ARM::pc);483 return (reg == ARMRegisters::sp) || (reg == ARMRegisters::pc); 484 484 } 485 485 … … 693 693 { 694 694 // Rd can only be SP if Rn is also SP. 695 ASSERT((rd != ARM ::sp) || (rn == ARM::sp));696 ASSERT(rd != ARM ::pc);697 ASSERT(rn != ARM ::pc);695 ASSERT((rd != ARMRegisters::sp) || (rn == ARMRegisters::sp)); 696 ASSERT(rd != ARMRegisters::pc); 697 ASSERT(rn != ARMRegisters::pc); 698 698 ASSERT(imm.isValid()); 699 699 700 if (rn == ARM ::sp) {700 if (rn == ARMRegisters::sp) { 701 701 if (!(rd & 8) && imm.isUInt10()) { 702 702 m_formatter.oneWordOp5Reg3Imm8(OP_ADD_SP_imm_T1, rd, imm.getUInt10() >> 2); 703 703 return; 704 } else if ((rd == ARM ::sp) && imm.isUInt9()) {704 } else if ((rd == ARMRegisters::sp) && imm.isUInt9()) { 705 705 m_formatter.oneWordOp9Imm7(OP_ADD_SP_imm_T2, imm.getUInt9() >> 2); 706 706 return; … … 726 726 void add(RegisterID rd, RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) 727 727 { 728 ASSERT((rd != ARM ::sp) || (rn == ARM::sp));729 ASSERT(rd != ARM ::pc);730 ASSERT(rn != ARM ::pc);728 ASSERT((rd != ARMRegisters::sp) || (rn == ARMRegisters::sp)); 729 ASSERT(rd != ARMRegisters::pc); 730 ASSERT(rn != ARMRegisters::pc); 731 731 ASSERT(!BadReg(rm)); 732 732 m_formatter.twoWordOp12Reg4FourFours(OP_ADD_reg_T3, rn, FourFours(shift.hi4(), rd, shift.lo4(), rm)); … … 750 750 { 751 751 // Rd can only be SP if Rn is also SP. 752 ASSERT((rd != ARM ::sp) || (rn == ARM::sp));753 ASSERT(rd != ARM ::pc);754 ASSERT(rn != ARM ::pc);752 ASSERT((rd != ARMRegisters::sp) || (rn == ARMRegisters::sp)); 753 ASSERT(rd != ARMRegisters::pc); 754 ASSERT(rn != ARMRegisters::pc); 755 755 ASSERT(imm.isEncodedImm()); 756 756 … … 771 771 void add_S(RegisterID rd, RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) 772 772 { 773 ASSERT((rd != ARM ::sp) || (rn == ARM::sp));774 ASSERT(rd != ARM ::pc);775 ASSERT(rn != ARM ::pc);773 ASSERT((rd != ARMRegisters::sp) || (rn == ARMRegisters::sp)); 774 ASSERT(rd != ARMRegisters::pc); 775 ASSERT(rn != ARMRegisters::pc); 776 776 ASSERT(!BadReg(rm)); 777 777 m_formatter.twoWordOp12Reg4FourFours(OP_ADD_S_reg_T3, rn, FourFours(shift.hi4(), rd, shift.lo4(), rm)); … … 839 839 JmpSrc blx(RegisterID rm) 840 840 { 841 ASSERT(rm != ARM ::pc);841 ASSERT(rm != ARMRegisters::pc); 842 842 m_formatter.oneWordOp8RegReg143(OP_BLX, rm, (RegisterID)8); 843 843 return JmpSrc(m_formatter.size()); … … 858 858 void cmn(RegisterID rn, ARMThumbImmediate imm) 859 859 { 860 ASSERT(rn != ARM ::pc);860 ASSERT(rn != ARMRegisters::pc); 861 861 ASSERT(imm.isEncodedImm()); 862 862 … … 866 866 void cmp(RegisterID rn, ARMThumbImmediate imm) 867 867 { 868 ASSERT(rn != ARM ::pc);868 ASSERT(rn != ARMRegisters::pc); 869 869 ASSERT(imm.isEncodedImm()); 870 870 … … 877 877 void cmp(RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) 878 878 { 879 ASSERT(rn != ARM ::pc);879 ASSERT(rn != ARMRegisters::pc); 880 880 ASSERT(!BadReg(rm)); 881 881 m_formatter.twoWordOp12Reg4FourFours(OP_CMP_reg_T2, rn, FourFours(shift.hi4(), 0xf, shift.lo4(), rm)); … … 939 939 } 940 940 941 // rt == ARM ::pc only allowed if last instruction in IT (if then) block.941 // rt == ARMRegisters::pc only allowed if last instruction in IT (if then) block. 942 942 void ldr(RegisterID rt, RegisterID rn, ARMThumbImmediate imm) 943 943 { 944 ASSERT(rn != ARM ::pc); // LDR (literal)944 ASSERT(rn != ARMRegisters::pc); // LDR (literal) 945 945 ASSERT(imm.isUInt12()); 946 946 947 947 if (!((rt | rn) & 8) && imm.isUInt7()) 948 948 m_formatter.oneWordOp5Imm5Reg3Reg3(OP_LDR_imm_T1, imm.getUInt7() >> 2, rn, rt); 949 else if ((rn == ARM ::sp) && !(rt & 8) && imm.isUInt10())949 else if ((rn == ARMRegisters::sp) && !(rt & 8) && imm.isUInt10()) 950 950 m_formatter.oneWordOp5Reg3Imm8(OP_LDR_imm_T2, rt, imm.getUInt10() >> 2); 951 951 else … … 966 966 void ldr(RegisterID rt, RegisterID rn, int offset, bool index, bool wback) 967 967 { 968 ASSERT(rt != ARM ::pc);969 ASSERT(rn != ARM ::pc);968 ASSERT(rt != ARMRegisters::pc); 969 ASSERT(rn != ARMRegisters::pc); 970 970 ASSERT(index || wback); 971 971 ASSERT(!wback | (rt != rn)); … … 986 986 } 987 987 988 // rt == ARM ::pc only allowed if last instruction in IT (if then) block.988 // rt == ARMRegisters::pc only allowed if last instruction in IT (if then) block. 989 989 void ldr(RegisterID rt, RegisterID rn, RegisterID rm, unsigned shift=0) 990 990 { 991 ASSERT(rn != ARM ::pc); // LDR (literal)991 ASSERT(rn != ARMRegisters::pc); // LDR (literal) 992 992 ASSERT(!BadReg(rm)); 993 993 ASSERT(shift <= 3); … … 999 999 } 1000 1000 1001 // rt == ARM ::pc only allowed if last instruction in IT (if then) block.1001 // rt == ARMRegisters::pc only allowed if last instruction in IT (if then) block. 1002 1002 void ldrh(RegisterID rt, RegisterID rn, ARMThumbImmediate imm) 1003 1003 { 1004 ASSERT(rn != ARM ::pc); // LDR (literal)1004 ASSERT(rn != ARMRegisters::pc); // LDR (literal) 1005 1005 ASSERT(imm.isUInt12()); 1006 1006 … … 1024 1024 void ldrh(RegisterID rt, RegisterID rn, int offset, bool index, bool wback) 1025 1025 { 1026 ASSERT(rt != ARM ::pc);1027 ASSERT(rn != ARM ::pc);1026 ASSERT(rt != ARMRegisters::pc); 1027 ASSERT(rn != ARMRegisters::pc); 1028 1028 ASSERT(index || wback); 1029 1029 ASSERT(!wback | (rt != rn)); … … 1047 1047 { 1048 1048 ASSERT(!BadReg(rt)); // Memory hint 1049 ASSERT(rn != ARM ::pc); // LDRH (literal)1049 ASSERT(rn != ARMRegisters::pc); // LDRH (literal) 1050 1050 ASSERT(!BadReg(rm)); 1051 1051 ASSERT(shift <= 3); … … 1198 1198 } 1199 1199 1200 // rt == ARM ::pc only allowed if last instruction in IT (if then) block.1200 // rt == ARMRegisters::pc only allowed if last instruction in IT (if then) block. 1201 1201 void str(RegisterID rt, RegisterID rn, ARMThumbImmediate imm) 1202 1202 { 1203 ASSERT(rt != ARM ::pc);1204 ASSERT(rn != ARM ::pc);1203 ASSERT(rt != ARMRegisters::pc); 1204 ASSERT(rn != ARMRegisters::pc); 1205 1205 ASSERT(imm.isUInt12()); 1206 1206 1207 1207 if (!((rt | rn) & 8) && imm.isUInt7()) 1208 1208 m_formatter.oneWordOp5Imm5Reg3Reg3(OP_STR_imm_T1, imm.getUInt7() >> 2, rn, rt); 1209 else if ((rn == ARM ::sp) && !(rt & 8) && imm.isUInt10())1209 else if ((rn == ARMRegisters::sp) && !(rt & 8) && imm.isUInt10()) 1210 1210 m_formatter.oneWordOp5Reg3Imm8(OP_STR_imm_T2, rt, imm.getUInt10() >> 2); 1211 1211 else … … 1226 1226 void str(RegisterID rt, RegisterID rn, int offset, bool index, bool wback) 1227 1227 { 1228 ASSERT(rt != ARM ::pc);1229 ASSERT(rn != ARM ::pc);1228 ASSERT(rt != ARMRegisters::pc); 1229 ASSERT(rn != ARMRegisters::pc); 1230 1230 ASSERT(index || wback); 1231 1231 ASSERT(!wback | (rt != rn)); … … 1246 1246 } 1247 1247 1248 // rt == ARM ::pc only allowed if last instruction in IT (if then) block.1248 // rt == ARMRegisters::pc only allowed if last instruction in IT (if then) block. 1249 1249 void str(RegisterID rt, RegisterID rn, RegisterID rm, unsigned shift=0) 1250 1250 { 1251 ASSERT(rn != ARM ::pc);1251 ASSERT(rn != ARMRegisters::pc); 1252 1252 ASSERT(!BadReg(rm)); 1253 1253 ASSERT(shift <= 3); … … 1262 1262 { 1263 1263 // Rd can only be SP if Rn is also SP. 1264 ASSERT((rd != ARM ::sp) || (rn == ARM::sp));1265 ASSERT(rd != ARM ::pc);1266 ASSERT(rn != ARM ::pc);1264 ASSERT((rd != ARMRegisters::sp) || (rn == ARMRegisters::sp)); 1265 ASSERT(rd != ARMRegisters::pc); 1266 ASSERT(rn != ARMRegisters::pc); 1267 1267 ASSERT(imm.isValid()); 1268 1268 1269 if ((rn == ARM ::sp) && (rd == ARM::sp) && imm.isUInt9()) {1269 if ((rn == ARMRegisters::sp) && (rd == ARMRegisters::sp) && imm.isUInt9()) { 1270 1270 m_formatter.oneWordOp9Imm7(OP_SUB_SP_imm_T1, imm.getUInt9() >> 2); 1271 1271 return; … … 1290 1290 void sub(RegisterID rd, RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) 1291 1291 { 1292 ASSERT((rd != ARM ::sp) || (rn == ARM::sp));1293 ASSERT(rd != ARM ::pc);1294 ASSERT(rn != ARM ::pc);1292 ASSERT((rd != ARMRegisters::sp) || (rn == ARMRegisters::sp)); 1293 ASSERT(rd != ARMRegisters::pc); 1294 ASSERT(rn != ARMRegisters::pc); 1295 1295 ASSERT(!BadReg(rm)); 1296 1296 m_formatter.twoWordOp12Reg4FourFours(OP_SUB_reg_T2, rn, FourFours(shift.hi4(), rd, shift.lo4(), rm)); … … 1310 1310 { 1311 1311 // Rd can only be SP if Rn is also SP. 1312 ASSERT((rd != ARM ::sp) || (rn == ARM::sp));1313 ASSERT(rd != ARM ::pc);1314 ASSERT(rn != ARM ::pc);1312 ASSERT((rd != ARMRegisters::sp) || (rn == ARMRegisters::sp)); 1313 ASSERT(rd != ARMRegisters::pc); 1314 ASSERT(rn != ARMRegisters::pc); 1315 1315 ASSERT(imm.isValid()); 1316 1316 1317 if ((rn == ARM ::sp) && (rd == ARM::sp) && imm.isUInt9()) {1317 if ((rn == ARMRegisters::sp) && (rd == ARMRegisters::sp) && imm.isUInt9()) { 1318 1318 m_formatter.oneWordOp9Imm7(OP_SUB_SP_imm_T1, imm.getUInt9() >> 2); 1319 1319 return; … … 1334 1334 void sub_S(RegisterID rd, RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) 1335 1335 { 1336 ASSERT((rd != ARM ::sp) || (rn == ARM::sp));1337 ASSERT(rd != ARM ::pc);1338 ASSERT(rn != ARM ::pc);1336 ASSERT((rd != ARMRegisters::sp) || (rn == ARMRegisters::sp)); 1337 ASSERT(rd != ARMRegisters::pc); 1338 ASSERT(rn != ARMRegisters::pc); 1339 1339 ASSERT(!BadReg(rm)); 1340 1340 m_formatter.twoWordOp12Reg4FourFours(OP_SUB_S_reg_T2, rn, FourFours(shift.hi4(), rd, shift.lo4(), rm)); -
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 } -
trunk/JavaScriptCore/assembler/MacroAssemblerARMv7.h
r46209 r47530 40 40 // - dTR is likely used more than aTR, and we'll get better instruction 41 41 // encoding if it's in the low 8 registers. 42 static const ARM ::RegisterID dataTempRegister = ARM::ip;43 static const RegisterID addressTempRegister = ARM ::r3;44 static const FPRegisterID fpTempRegister = ARM ::d7;42 static const ARMRegisters::RegisterID dataTempRegister = ARMRegisters::ip; 43 static const RegisterID addressTempRegister = ARMRegisters::r3; 44 static const FPRegisterID fpTempRegister = ARMRegisters::d7; 45 45 46 46 struct ArmAddress { … … 103 103 }; 104 104 105 static const RegisterID stackPointerRegister = ARM ::sp;106 static const RegisterID linkRegister = ARM ::lr;105 static const RegisterID stackPointerRegister = ARMRegisters::sp; 106 static const RegisterID linkRegister = ARMRegisters::lr; 107 107 108 108 // Integer arithmetic operations: … … 547 547 { 548 548 // store postindexed with writeback 549 m_assembler.ldr(dest, ARM ::sp, sizeof(void*), false, true);549 m_assembler.ldr(dest, ARMRegisters::sp, sizeof(void*), false, true); 550 550 } 551 551 … … 553 553 { 554 554 // store preindexed with writeback 555 m_assembler.str(src, ARM ::sp, -sizeof(void*), true, true);555 m_assembler.str(src, ARMRegisters::sp, -sizeof(void*), true, true); 556 556 } 557 557 -
trunk/JavaScriptCore/assembler/MacroAssemblerX86Common.h
r46598 r47530 65 65 }; 66 66 67 static const RegisterID stackPointerRegister = X86 ::esp;67 static const RegisterID stackPointerRegister = X86Registers::esp; 68 68 69 69 // Integer arithmetic operations: … … 133 133 // On x86 we can only shift by ecx; if asked to shift by another register we'll 134 134 // need rejig the shift amount into ecx first, and restore the registers afterwards. 135 if (shift_amount != X86 ::ecx) {136 swap(shift_amount, X86 ::ecx);135 if (shift_amount != X86Registers::ecx) { 136 swap(shift_amount, X86Registers::ecx); 137 137 138 138 // E.g. transform "shll %eax, %eax" -> "xchgl %eax, %ecx; shll %ecx, %ecx; xchgl %eax, %ecx" 139 139 if (dest == shift_amount) 140 m_assembler.shll_CLr(X86 ::ecx);140 m_assembler.shll_CLr(X86Registers::ecx); 141 141 // E.g. transform "shll %eax, %ecx" -> "xchgl %eax, %ecx; shll %ecx, %eax; xchgl %eax, %ecx" 142 else if (dest == X86 ::ecx)142 else if (dest == X86Registers::ecx) 143 143 m_assembler.shll_CLr(shift_amount); 144 144 // E.g. transform "shll %eax, %ebx" -> "xchgl %eax, %ecx; shll %ecx, %ebx; xchgl %eax, %ecx" … … 146 146 m_assembler.shll_CLr(dest); 147 147 148 swap(shift_amount, X86 ::ecx);148 swap(shift_amount, X86Registers::ecx); 149 149 } else 150 150 m_assembler.shll_CLr(dest); … … 215 215 // On x86 we can only shift by ecx; if asked to shift by another register we'll 216 216 // need rejig the shift amount into ecx first, and restore the registers afterwards. 217 if (shift_amount != X86 ::ecx) {218 swap(shift_amount, X86 ::ecx);217 if (shift_amount != X86Registers::ecx) { 218 swap(shift_amount, X86Registers::ecx); 219 219 220 220 // E.g. transform "shll %eax, %eax" -> "xchgl %eax, %ecx; shll %ecx, %ecx; xchgl %eax, %ecx" 221 221 if (dest == shift_amount) 222 m_assembler.sarl_CLr(X86 ::ecx);222 m_assembler.sarl_CLr(X86Registers::ecx); 223 223 // E.g. transform "shll %eax, %ecx" -> "xchgl %eax, %ecx; shll %ecx, %eax; xchgl %eax, %ecx" 224 else if (dest == X86 ::ecx)224 else if (dest == X86Registers::ecx) 225 225 m_assembler.sarl_CLr(shift_amount); 226 226 // E.g. transform "shll %eax, %ebx" -> "xchgl %eax, %ecx; shll %ecx, %ebx; xchgl %eax, %ecx" … … 228 228 m_assembler.sarl_CLr(dest); 229 229 230 swap(shift_amount, X86 ::ecx);230 swap(shift_amount, X86Registers::ecx); 231 231 } else 232 232 m_assembler.sarl_CLr(dest); -
trunk/JavaScriptCore/assembler/MacroAssemblerX86_64.h
r46598 r47530 39 39 class MacroAssemblerX86_64 : public MacroAssemblerX86Common { 40 40 protected: 41 static const X86 ::RegisterID scratchRegister = X86::r11;41 static const X86Registers::RegisterID scratchRegister = X86Registers::r11; 42 42 43 43 public: … … 80 80 void load32(void* address, RegisterID dest) 81 81 { 82 if (dest == X86 ::eax)82 if (dest == X86Registers::eax) 83 83 m_assembler.movl_mEAX(address); 84 84 else { 85 move(X86 ::eax, dest);85 move(X86Registers::eax, dest); 86 86 m_assembler.movl_mEAX(address); 87 swap(X86 ::eax, dest);87 swap(X86Registers::eax, dest); 88 88 } 89 89 } … … 103 103 void store32(Imm32 imm, void* address) 104 104 { 105 move(X86 ::eax, scratchRegister);106 move(imm, X86 ::eax);105 move(X86Registers::eax, scratchRegister); 106 move(imm, X86Registers::eax); 107 107 m_assembler.movl_EAXm(address); 108 move(scratchRegister, X86 ::eax);108 move(scratchRegister, X86Registers::eax); 109 109 } 110 110 … … 197 197 // On x86 we can only shift by ecx; if asked to shift by another register we'll 198 198 // need rejig the shift amount into ecx first, and restore the registers afterwards. 199 if (shift_amount != X86 ::ecx) {200 swap(shift_amount, X86 ::ecx);199 if (shift_amount != X86Registers::ecx) { 200 swap(shift_amount, X86Registers::ecx); 201 201 202 202 // E.g. transform "shll %eax, %eax" -> "xchgl %eax, %ecx; shll %ecx, %ecx; xchgl %eax, %ecx" 203 203 if (dest == shift_amount) 204 m_assembler.sarq_CLr(X86 ::ecx);204 m_assembler.sarq_CLr(X86Registers::ecx); 205 205 // E.g. transform "shll %eax, %ecx" -> "xchgl %eax, %ecx; shll %ecx, %eax; xchgl %eax, %ecx" 206 else if (dest == X86 ::ecx)206 else if (dest == X86Registers::ecx) 207 207 m_assembler.sarq_CLr(shift_amount); 208 208 // E.g. transform "shll %eax, %ebx" -> "xchgl %eax, %ecx; shll %ecx, %ebx; xchgl %eax, %ecx" … … 210 210 m_assembler.sarq_CLr(dest); 211 211 212 swap(shift_amount, X86 ::ecx);212 swap(shift_amount, X86Registers::ecx); 213 213 } else 214 214 m_assembler.sarq_CLr(dest); … … 259 259 void loadPtr(void* address, RegisterID dest) 260 260 { 261 if (dest == X86 ::eax)261 if (dest == X86Registers::eax) 262 262 m_assembler.movq_mEAX(address); 263 263 else { 264 move(X86 ::eax, dest);264 move(X86Registers::eax, dest); 265 265 m_assembler.movq_mEAX(address); 266 swap(X86 ::eax, dest);266 swap(X86Registers::eax, dest); 267 267 } 268 268 } … … 286 286 void storePtr(RegisterID src, void* address) 287 287 { 288 if (src == X86 ::eax)288 if (src == X86Registers::eax) 289 289 m_assembler.movq_EAXm(address); 290 290 else { 291 swap(X86 ::eax, src);291 swap(X86Registers::eax, src); 292 292 m_assembler.movq_EAXm(address); 293 swap(X86 ::eax, src);293 swap(X86Registers::eax, src); 294 294 } 295 295 } -
trunk/JavaScriptCore/assembler/X86Assembler.h
r47186 r47530 44 44 #endif 45 45 46 namespace X86 {46 namespace X86Registers { 47 47 typedef enum { 48 48 eax, … … 81 81 class X86Assembler { 82 82 public: 83 typedef X86 ::RegisterID RegisterID;84 typedef X86 ::XMMRegisterID XMMRegisterID;83 typedef X86Registers::RegisterID RegisterID; 84 typedef X86Registers::XMMRegisterID XMMRegisterID; 85 85 typedef XMMRegisterID FPRegisterID; 86 86 … … 1119 1119 void movl_rm(RegisterID src, void* addr) 1120 1120 { 1121 if (src == X86 ::eax)1121 if (src == X86Registers::eax) 1122 1122 movl_EAXm(addr); 1123 1123 else … … 1127 1127 void movl_mr(void* addr, RegisterID dst) 1128 1128 { 1129 if (dst == X86 ::eax)1129 if (dst == X86Registers::eax) 1130 1130 movl_mEAX(addr); 1131 1131 else … … 1893 1893 // Internals; ModRm and REX formatters. 1894 1894 1895 static const RegisterID noBase = X86 ::ebp;1896 static const RegisterID hasSib = X86 ::esp;1897 static const RegisterID noIndex = X86 ::esp;1898 #if PLATFORM(X86_64) 1899 static const RegisterID noBase2 = X86 ::r13;1900 static const RegisterID hasSib2 = X86 ::r12;1895 static const RegisterID noBase = X86Registers::ebp; 1896 static const RegisterID hasSib = X86Registers::esp; 1897 static const RegisterID noIndex = X86Registers::esp; 1898 #if PLATFORM(X86_64) 1899 static const RegisterID noBase2 = X86Registers::r13; 1900 static const RegisterID hasSib2 = X86Registers::r12; 1901 1901 1902 1902 // Registers r8 & above require a REX prefixe. 1903 1903 inline bool regRequiresRex(int reg) 1904 1904 { 1905 return (reg >= X86 ::r8);1905 return (reg >= X86Registers::r8); 1906 1906 } 1907 1907 … … 1909 1909 inline bool byteRegRequiresRex(int reg) 1910 1910 { 1911 return (reg >= X86 ::esp);1911 return (reg >= X86Registers::esp); 1912 1912 } 1913 1913
Note:
See TracChangeset
for help on using the changeset viewer.