Changeset 65042 in webkit for trunk/JavaScriptCore/assembler/MacroAssemblerARMv7.h
- Timestamp:
- Aug 9, 2010, 8:19:19 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/MacroAssemblerARMv7.h
r62419 r65042 46 46 47 47 public: 48 typedef ARMv7Assembler::LinkRecord LinkRecord; 49 typedef ARMv7Assembler::JumpLinkType JumpLinkType; 50 51 MacroAssemblerARMv7() 52 : m_inUninterruptedSequence(false) 53 { 54 } 55 56 void beginUninterruptedSequence() { m_inUninterruptedSequence = true; } 57 void endUninterruptedSequence() { m_inUninterruptedSequence = false; } 58 Vector<LinkRecord>& jumpsToLink() { return m_assembler.jumpsToLink(); } 59 void* unlinkedCode() { return m_assembler.unlinkedCode(); } 60 JumpLinkType computeJumpType(LinkRecord& record, const uint8_t* from, const uint8_t* to) { return m_assembler.computeJumpType(record, from, to); } 61 void recordLinkOffsets(int32_t regionStart, int32_t regionEnd, int32_t offset) {return m_assembler.recordLinkOffsets(regionStart, regionEnd, offset); } 62 int jumpSizeDelta(JumpLinkType jumpLinkType) { return m_assembler.jumpSizeDelta(jumpLinkType); } 63 void link(LinkRecord& record, uint8_t* from, uint8_t* to) { return m_assembler.link(record, from, to); } 64 48 65 struct ArmAddress { 49 66 enum AddressType { … … 970 987 void jump(RegisterID target) 971 988 { 972 m_assembler.bx(target );989 m_assembler.bx(target, inUninterruptedSequence() ? ARMv7Assembler::JumpFullSize : ARMv7Assembler::JumpNoCondition); 973 990 } 974 991 … … 977 994 { 978 995 load32(address, dataTempRegister); 979 m_assembler.bx(dataTempRegister );996 m_assembler.bx(dataTempRegister, inUninterruptedSequence() ? ARMv7Assembler::JumpFullSize : ARMv7Assembler::JumpNoCondition); 980 997 } 981 998 … … 1013 1030 Jump branchMul32(Condition cond, RegisterID src, RegisterID dest) 1014 1031 { 1015 ASSERT (cond == Overflow);1032 ASSERT_UNUSED(cond, cond == Overflow); 1016 1033 m_assembler.smull(dest, dataTempRegister, dest, src); 1017 1034 m_assembler.asr(addressTempRegister, dest, 31); … … 1021 1038 Jump branchMul32(Condition cond, Imm32 imm, RegisterID src, RegisterID dest) 1022 1039 { 1023 ASSERT (cond == Overflow);1040 ASSERT_UNUSED(cond, cond == Overflow); 1024 1041 move(imm, dataTempRegister); 1025 1042 m_assembler.smull(dest, dataTempRegister, src, dataTempRegister); … … 1060 1077 void breakpoint() 1061 1078 { 1062 m_assembler.bkpt( );1079 m_assembler.bkpt(0); 1063 1080 } 1064 1081 … … 1066 1083 { 1067 1084 moveFixedWidthEncoding(Imm32(0), dataTempRegister); 1068 return Call(m_assembler.blx(dataTempRegister ), Call::LinkableNear);1085 return Call(m_assembler.blx(dataTempRegister, ARMv7Assembler::JumpFullSize), Call::LinkableNear); 1069 1086 } 1070 1087 … … 1072 1089 { 1073 1090 moveFixedWidthEncoding(Imm32(0), dataTempRegister); 1074 return Call(m_assembler.blx(dataTempRegister ), Call::Linkable);1091 return Call(m_assembler.blx(dataTempRegister, ARMv7Assembler::JumpFullSize), Call::Linkable); 1075 1092 } 1076 1093 1077 1094 Call call(RegisterID target) 1078 1095 { 1079 return Call(m_assembler.blx(target ), Call::None);1096 return Call(m_assembler.blx(target, ARMv7Assembler::JumpFullSize), Call::None); 1080 1097 } 1081 1098 … … 1083 1100 { 1084 1101 load32(address, dataTempRegister); 1085 return Call(m_assembler.blx(dataTempRegister ), Call::None);1102 return Call(m_assembler.blx(dataTempRegister, ARMv7Assembler::JumpFullSize), Call::None); 1086 1103 } 1087 1104 1088 1105 void ret() 1089 1106 { 1090 m_assembler.bx(linkRegister );1107 m_assembler.bx(linkRegister, ARMv7Assembler::JumpFullSize); 1091 1108 } 1092 1109 … … 1188 1205 // Like a normal call, but don't link. 1189 1206 moveFixedWidthEncoding(Imm32(0), dataTempRegister); 1190 return Call(m_assembler.bx(dataTempRegister ), Call::Linkable);1207 return Call(m_assembler.bx(dataTempRegister, ARMv7Assembler::JumpFullSize), Call::Linkable); 1191 1208 } 1192 1209 … … 1197 1214 } 1198 1215 1216 1217 int executableOffsetFor(int location) 1218 { 1219 return m_assembler.executableOffsetFor(location); 1220 } 1199 1221 1200 1222 protected: 1223 bool inUninterruptedSequence() 1224 { 1225 return m_inUninterruptedSequence; 1226 } 1227 1201 1228 ARMv7Assembler::JmpSrc makeJump() 1202 1229 { 1203 1230 moveFixedWidthEncoding(Imm32(0), dataTempRegister); 1204 return m_assembler.bx(dataTempRegister );1231 return m_assembler.bx(dataTempRegister, inUninterruptedSequence() ? ARMv7Assembler::JumpFullSize : ARMv7Assembler::JumpNoCondition); 1205 1232 } 1206 1233 … … 1209 1236 m_assembler.it(cond, true, true); 1210 1237 moveFixedWidthEncoding(Imm32(0), dataTempRegister); 1211 return m_assembler.bx(dataTempRegister );1238 return m_assembler.bx(dataTempRegister, inUninterruptedSequence() ? ARMv7Assembler::JumpFullSize : ARMv7Assembler::JumpCondition, cond); 1212 1239 } 1213 1240 ARMv7Assembler::JmpSrc makeBranch(Condition cond) { return makeBranch(armV7Condition(cond)); } … … 1299 1326 ARMv7Assembler::relinkCall(call.dataLocation(), destination.executableAddress()); 1300 1327 } 1328 1329 bool m_inUninterruptedSequence; 1301 1330 }; 1302 1331
Note:
See TracChangeset
for help on using the changeset viewer.