Changeset 155643 in webkit for trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
- Timestamp:
- Sep 12, 2013, 1:07:02 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r155594 r155643 1185 1185 } 1186 1186 1187 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, SpeculateInt32Operand& op1) 1187 #if USE(JSVALUE32_64) 1188 GPRTemporary::GPRTemporary( 1189 SpeculativeJIT* jit, ReuseTag, JSValueOperand& op1, WhichValueWord which) 1188 1190 : m_jit(jit) 1189 1191 , m_gpr(InvalidGPRReg) 1190 1192 { 1191 if ( m_jit->canReuse(op1.node()))1192 m_gpr = m_jit->reuse(op1.gpr( ));1193 if (!op1.isDouble() && m_jit->canReuse(op1.node())) 1194 m_gpr = m_jit->reuse(op1.gpr(which)); 1193 1195 else 1194 1196 m_gpr = m_jit->allocate(); 1195 1197 } 1196 1197 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, SpeculateInt32Operand& op1, SpeculateInt32Operand& op2) 1198 : m_jit(jit) 1199 , m_gpr(InvalidGPRReg) 1200 { 1201 if (m_jit->canReuse(op1.node())) 1202 m_gpr = m_jit->reuse(op1.gpr()); 1203 else if (m_jit->canReuse(op2.node())) 1204 m_gpr = m_jit->reuse(op2.gpr()); 1205 else 1206 m_gpr = m_jit->allocate(); 1207 } 1208 1209 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, SpeculateStrictInt32Operand& op1) 1210 : m_jit(jit) 1211 , m_gpr(InvalidGPRReg) 1212 { 1213 if (m_jit->canReuse(op1.node())) 1214 m_gpr = m_jit->reuse(op1.gpr()); 1215 else 1216 m_gpr = m_jit->allocate(); 1217 } 1218 1219 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, Int32Operand& op1) 1220 : m_jit(jit) 1221 , m_gpr(InvalidGPRReg) 1222 { 1223 if (m_jit->canReuse(op1.node())) 1224 m_gpr = m_jit->reuse(op1.gpr()); 1225 else 1226 m_gpr = m_jit->allocate(); 1227 } 1228 1229 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, Int32Operand& op1, Int32Operand& op2) 1230 : m_jit(jit) 1231 , m_gpr(InvalidGPRReg) 1232 { 1233 if (m_jit->canReuse(op1.node())) 1234 m_gpr = m_jit->reuse(op1.gpr()); 1235 else if (m_jit->canReuse(op2.node())) 1236 m_gpr = m_jit->reuse(op2.gpr()); 1237 else 1238 m_gpr = m_jit->allocate(); 1239 } 1240 1241 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, SpeculateCellOperand& op1) 1242 : m_jit(jit) 1243 , m_gpr(InvalidGPRReg) 1244 { 1245 if (m_jit->canReuse(op1.node())) 1246 m_gpr = m_jit->reuse(op1.gpr()); 1247 else 1248 m_gpr = m_jit->allocate(); 1249 } 1250 1251 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, SpeculateBooleanOperand& op1) 1252 : m_jit(jit) 1253 , m_gpr(InvalidGPRReg) 1254 { 1255 if (m_jit->canReuse(op1.node())) 1256 m_gpr = m_jit->reuse(op1.gpr()); 1257 else 1258 m_gpr = m_jit->allocate(); 1259 } 1260 1261 #if USE(JSVALUE64) 1262 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, JSValueOperand& op1) 1263 : m_jit(jit) 1264 , m_gpr(InvalidGPRReg) 1265 { 1266 if (m_jit->canReuse(op1.node())) 1267 m_gpr = m_jit->reuse(op1.gpr()); 1268 else 1269 m_gpr = m_jit->allocate(); 1270 } 1271 #else 1272 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, JSValueOperand& op1, bool tag) 1273 : m_jit(jit) 1274 , m_gpr(InvalidGPRReg) 1275 { 1276 if (!op1.isDouble() && m_jit->canReuse(op1.node())) 1277 m_gpr = m_jit->reuse(tag ? op1.tagGPR() : op1.payloadGPR()); 1278 else 1279 m_gpr = m_jit->allocate(); 1280 } 1281 #endif 1282 1283 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, StorageOperand& op1) 1284 : m_jit(jit) 1285 , m_gpr(InvalidGPRReg) 1286 { 1287 if (m_jit->canReuse(op1.node())) 1288 m_gpr = m_jit->reuse(op1.gpr()); 1289 else 1290 m_gpr = m_jit->allocate(); 1291 } 1198 #endif // USE(JSVALUE32_64) 1292 1199 1293 1200 void GPRTemporary::adopt(GPRTemporary& other) … … 2238 2145 case Int32Use: { 2239 2146 SpeculateInt32Operand op1(this, node->child1()); 2240 GPRTemporary result(this, op1);2147 GPRTemporary result(this, Reuse, op1); 2241 2148 m_jit.move(op1.gpr(), result.gpr()); 2242 2149 integerResult(result.gpr(), node, op1.format()); … … 2249 2156 case GeneratedOperandInteger: { 2250 2157 SpeculateInt32Operand op1(this, node->child1(), ManualOperandSpeculation); 2251 GPRTemporary result(this, op1);2158 GPRTemporary result(this, Reuse, op1); 2252 2159 m_jit.move(op1.gpr(), result.gpr()); 2253 2160 integerResult(result.gpr(), node, op1.format()); … … 2388 2295 case BooleanUse: { 2389 2296 SpeculateBooleanOperand op1(this, node->child1()); 2390 GPRTemporary result(this, op1);2297 GPRTemporary result(this, Reuse, op1); 2391 2298 2392 2299 m_jit.move(op1.gpr(), result.gpr()); … … 2982 2889 SpeculateInt32Operand op1(this, node->child1()); 2983 2890 SpeculateInt32Operand op2(this, node->child2()); 2984 GPRTemporary result(this, op1, op2);2891 GPRTemporary result(this, Reuse, op1, op2); 2985 2892 2986 2893 GPRReg gpr1 = op1.gpr(); … … 3906 3813 GPRTemporary leftTemp(this); 3907 3814 GPRTemporary rightTemp(this); 3908 GPRTemporary leftTemp2(this, left);3909 GPRTemporary rightTemp2(this, right);3815 GPRTemporary leftTemp2(this, Reuse, left); 3816 GPRTemporary rightTemp2(this, Reuse, right); 3910 3817 3911 3818 GPRReg leftGPR = left.gpr(); … … 4159 4066 { 4160 4067 SpeculateCellOperand base(this, node->child1()); 4161 GPRTemporary result(this, base);4068 GPRTemporary result(this, Reuse, base); 4162 4069 4163 4070 GPRReg baseReg = base.gpr(); … … 4188 4095 case Array::Contiguous: { 4189 4096 StorageOperand storage(this, node->child2()); 4190 GPRTemporary result(this, storage);4097 GPRTemporary result(this, Reuse, storage); 4191 4098 GPRReg storageReg = storage.gpr(); 4192 4099 GPRReg resultReg = result.gpr(); … … 4199 4106 case Array::SlowPutArrayStorage: { 4200 4107 StorageOperand storage(this, node->child2()); 4201 GPRTemporary result(this, storage);4108 GPRTemporary result(this, Reuse, storage); 4202 4109 GPRReg storageReg = storage.gpr(); 4203 4110 GPRReg resultReg = result.gpr(); … … 4211 4118 case Array::String: { 4212 4119 SpeculateCellOperand base(this, node->child1()); 4213 GPRTemporary result(this, base);4120 GPRTemporary result(this, Reuse, base); 4214 4121 GPRReg baseGPR = base.gpr(); 4215 4122 GPRReg resultGPR = result.gpr(); … … 4225 4132 ASSERT(isTypedView(node->arrayMode().typedArrayType())); 4226 4133 SpeculateCellOperand base(this, node->child1()); 4227 GPRTemporary result(this, base);4134 GPRTemporary result(this, Reuse, base); 4228 4135 GPRReg baseGPR = base.gpr(); 4229 4136 GPRReg resultGPR = result.gpr();
Note:
See TracChangeset
for help on using the changeset viewer.