Changeset 47530 in webkit for trunk/JavaScriptCore/assembler/ARMv7Assembler.h
- Timestamp:
- Aug 19, 2009, 5:02:24 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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));
Note:
See TracChangeset
for help on using the changeset viewer.