| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/interpreter/interpreter.h" | 5 #include "src/interpreter/interpreter.h" |
| 6 | 6 |
| 7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
| 8 #include "src/compiler.h" | 8 #include "src/compiler.h" |
| 9 #include "src/compiler/interpreter-assembler.h" | 9 #include "src/compiler/interpreter-assembler.h" |
| 10 #include "src/factory.h" | 10 #include "src/factory.h" |
| (...skipping 1200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1211 | 1211 |
| 1212 // Jump <imm8> | 1212 // Jump <imm8> |
| 1213 // | 1213 // |
| 1214 // Jump by number of bytes represented by the immediate operand |imm8|. | 1214 // Jump by number of bytes represented by the immediate operand |imm8|. |
| 1215 void Interpreter::DoJump(compiler::InterpreterAssembler* assembler) { | 1215 void Interpreter::DoJump(compiler::InterpreterAssembler* assembler) { |
| 1216 Node* relative_jump = __ BytecodeOperandImm(0); | 1216 Node* relative_jump = __ BytecodeOperandImm(0); |
| 1217 __ Jump(relative_jump); | 1217 __ Jump(relative_jump); |
| 1218 } | 1218 } |
| 1219 | 1219 |
| 1220 | 1220 |
| 1221 // JumpConstant <idx> | 1221 // JumpConstant <idx8> |
| 1222 // | 1222 // |
| 1223 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool. | 1223 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool. |
| 1224 void Interpreter::DoJumpConstant(compiler::InterpreterAssembler* assembler) { | 1224 void Interpreter::DoJumpConstant(compiler::InterpreterAssembler* assembler) { |
| 1225 Node* index = __ BytecodeOperandIdx(0); | 1225 Node* index = __ BytecodeOperandIdx(0); |
| 1226 Node* constant = __ LoadConstantPoolEntry(index); | 1226 Node* constant = __ LoadConstantPoolEntry(index); |
| 1227 Node* relative_jump = __ SmiUntag(constant); | 1227 Node* relative_jump = __ SmiUntag(constant); |
| 1228 __ Jump(relative_jump); | 1228 __ Jump(relative_jump); |
| 1229 } | 1229 } |
| 1230 | 1230 |
| 1231 | 1231 |
| 1232 // JumpConstantWide <idx16> |
| 1233 // |
| 1234 // Jump by number of bytes in the Smi in the |idx16| entry in the |
| 1235 // constant pool. |
| 1236 void Interpreter::DoJumpConstantWide( |
| 1237 compiler::InterpreterAssembler* assembler) { |
| 1238 DoJumpConstant(assembler); |
| 1239 } |
| 1240 |
| 1241 |
| 1232 // JumpIfTrue <imm8> | 1242 // JumpIfTrue <imm8> |
| 1233 // | 1243 // |
| 1234 // Jump by number of bytes represented by an immediate operand if the | 1244 // Jump by number of bytes represented by an immediate operand if the |
| 1235 // accumulator contains true. | 1245 // accumulator contains true. |
| 1236 void Interpreter::DoJumpIfTrue(compiler::InterpreterAssembler* assembler) { | 1246 void Interpreter::DoJumpIfTrue(compiler::InterpreterAssembler* assembler) { |
| 1237 Node* accumulator = __ GetAccumulator(); | 1247 Node* accumulator = __ GetAccumulator(); |
| 1238 Node* relative_jump = __ BytecodeOperandImm(0); | 1248 Node* relative_jump = __ BytecodeOperandImm(0); |
| 1239 Node* true_value = __ BooleanConstant(true); | 1249 Node* true_value = __ BooleanConstant(true); |
| 1240 __ JumpIfWordEqual(accumulator, true_value, relative_jump); | 1250 __ JumpIfWordEqual(accumulator, true_value, relative_jump); |
| 1241 } | 1251 } |
| 1242 | 1252 |
| 1243 | 1253 |
| 1244 // JumpIfTrueConstant <idx> | 1254 // JumpIfTrueConstant <idx8> |
| 1245 // | 1255 // |
| 1246 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool | 1256 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool |
| 1247 // if the accumulator contains true. | 1257 // if the accumulator contains true. |
| 1248 void Interpreter::DoJumpIfTrueConstant( | 1258 void Interpreter::DoJumpIfTrueConstant( |
| 1249 compiler::InterpreterAssembler* assembler) { | 1259 compiler::InterpreterAssembler* assembler) { |
| 1250 Node* accumulator = __ GetAccumulator(); | 1260 Node* accumulator = __ GetAccumulator(); |
| 1251 Node* index = __ BytecodeOperandIdx(0); | 1261 Node* index = __ BytecodeOperandIdx(0); |
| 1252 Node* constant = __ LoadConstantPoolEntry(index); | 1262 Node* constant = __ LoadConstantPoolEntry(index); |
| 1253 Node* relative_jump = __ SmiUntag(constant); | 1263 Node* relative_jump = __ SmiUntag(constant); |
| 1254 Node* true_value = __ BooleanConstant(true); | 1264 Node* true_value = __ BooleanConstant(true); |
| 1255 __ JumpIfWordEqual(accumulator, true_value, relative_jump); | 1265 __ JumpIfWordEqual(accumulator, true_value, relative_jump); |
| 1256 } | 1266 } |
| 1257 | 1267 |
| 1258 | 1268 |
| 1269 // JumpIfTrueConstantWide <idx16> |
| 1270 // |
| 1271 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool |
| 1272 // if the accumulator contains true. |
| 1273 void Interpreter::DoJumpIfTrueConstantWide( |
| 1274 compiler::InterpreterAssembler* assembler) { |
| 1275 DoJumpIfTrueConstant(assembler); |
| 1276 } |
| 1277 |
| 1278 |
| 1259 // JumpIfFalse <imm8> | 1279 // JumpIfFalse <imm8> |
| 1260 // | 1280 // |
| 1261 // Jump by number of bytes represented by an immediate operand if the | 1281 // Jump by number of bytes represented by an immediate operand if the |
| 1262 // accumulator contains false. | 1282 // accumulator contains false. |
| 1263 void Interpreter::DoJumpIfFalse(compiler::InterpreterAssembler* assembler) { | 1283 void Interpreter::DoJumpIfFalse(compiler::InterpreterAssembler* assembler) { |
| 1264 Node* accumulator = __ GetAccumulator(); | 1284 Node* accumulator = __ GetAccumulator(); |
| 1265 Node* relative_jump = __ BytecodeOperandImm(0); | 1285 Node* relative_jump = __ BytecodeOperandImm(0); |
| 1266 Node* false_value = __ BooleanConstant(false); | 1286 Node* false_value = __ BooleanConstant(false); |
| 1267 __ JumpIfWordEqual(accumulator, false_value, relative_jump); | 1287 __ JumpIfWordEqual(accumulator, false_value, relative_jump); |
| 1268 } | 1288 } |
| 1269 | 1289 |
| 1270 | 1290 |
| 1271 // JumpIfFalseConstant <idx> | 1291 // JumpIfFalseConstant <idx8> |
| 1272 // | 1292 // |
| 1273 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool | 1293 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool |
| 1274 // if the accumulator contains false. | 1294 // if the accumulator contains false. |
| 1275 void Interpreter::DoJumpIfFalseConstant( | 1295 void Interpreter::DoJumpIfFalseConstant( |
| 1276 compiler::InterpreterAssembler* assembler) { | 1296 compiler::InterpreterAssembler* assembler) { |
| 1277 Node* accumulator = __ GetAccumulator(); | 1297 Node* accumulator = __ GetAccumulator(); |
| 1278 Node* index = __ BytecodeOperandIdx(0); | 1298 Node* index = __ BytecodeOperandIdx(0); |
| 1279 Node* constant = __ LoadConstantPoolEntry(index); | 1299 Node* constant = __ LoadConstantPoolEntry(index); |
| 1280 Node* relative_jump = __ SmiUntag(constant); | 1300 Node* relative_jump = __ SmiUntag(constant); |
| 1281 Node* false_value = __ BooleanConstant(false); | 1301 Node* false_value = __ BooleanConstant(false); |
| 1282 __ JumpIfWordEqual(accumulator, false_value, relative_jump); | 1302 __ JumpIfWordEqual(accumulator, false_value, relative_jump); |
| 1283 } | 1303 } |
| 1284 | 1304 |
| 1285 | 1305 |
| 1306 // JumpIfFalseConstant <idx16> |
| 1307 // |
| 1308 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool |
| 1309 // if the accumulator contains false. |
| 1310 void Interpreter::DoJumpIfFalseConstantWide( |
| 1311 compiler::InterpreterAssembler* assembler) { |
| 1312 DoJumpIfFalseConstant(assembler); |
| 1313 } |
| 1314 |
| 1315 |
| 1286 // JumpIfToBooleanTrue <imm8> | 1316 // JumpIfToBooleanTrue <imm8> |
| 1287 // | 1317 // |
| 1288 // Jump by number of bytes represented by an immediate operand if the object | 1318 // Jump by number of bytes represented by an immediate operand if the object |
| 1289 // referenced by the accumulator is true when the object is cast to boolean. | 1319 // referenced by the accumulator is true when the object is cast to boolean. |
| 1290 void Interpreter::DoJumpIfToBooleanTrue( | 1320 void Interpreter::DoJumpIfToBooleanTrue( |
| 1291 compiler::InterpreterAssembler* assembler) { | 1321 compiler::InterpreterAssembler* assembler) { |
| 1292 Node* accumulator = __ GetAccumulator(); | 1322 Node* accumulator = __ GetAccumulator(); |
| 1293 Node* to_boolean_value = | 1323 Node* to_boolean_value = |
| 1294 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); | 1324 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); |
| 1295 Node* relative_jump = __ BytecodeOperandImm(0); | 1325 Node* relative_jump = __ BytecodeOperandImm(0); |
| 1296 Node* true_value = __ BooleanConstant(true); | 1326 Node* true_value = __ BooleanConstant(true); |
| 1297 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump); | 1327 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump); |
| 1298 } | 1328 } |
| 1299 | 1329 |
| 1300 | 1330 |
| 1301 // JumpIfToBooleanTrueConstant <idx> | 1331 // JumpIfToBooleanTrueConstant <idx8> |
| 1302 // | 1332 // |
| 1303 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool | 1333 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool |
| 1304 // if the object referenced by the accumulator is true when the object is cast | 1334 // if the object referenced by the accumulator is true when the object is cast |
| 1305 // to boolean. | 1335 // to boolean. |
| 1306 void Interpreter::DoJumpIfToBooleanTrueConstant( | 1336 void Interpreter::DoJumpIfToBooleanTrueConstant( |
| 1307 compiler::InterpreterAssembler* assembler) { | 1337 compiler::InterpreterAssembler* assembler) { |
| 1308 Node* accumulator = __ GetAccumulator(); | 1338 Node* accumulator = __ GetAccumulator(); |
| 1309 Node* to_boolean_value = | 1339 Node* to_boolean_value = |
| 1310 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); | 1340 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); |
| 1311 Node* index = __ BytecodeOperandIdx(0); | 1341 Node* index = __ BytecodeOperandIdx(0); |
| 1312 Node* constant = __ LoadConstantPoolEntry(index); | 1342 Node* constant = __ LoadConstantPoolEntry(index); |
| 1313 Node* relative_jump = __ SmiUntag(constant); | 1343 Node* relative_jump = __ SmiUntag(constant); |
| 1314 Node* true_value = __ BooleanConstant(true); | 1344 Node* true_value = __ BooleanConstant(true); |
| 1315 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump); | 1345 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump); |
| 1316 } | 1346 } |
| 1317 | 1347 |
| 1318 | 1348 |
| 1349 // JumpIfToBooleanTrueConstantWide <idx16> |
| 1350 // |
| 1351 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool |
| 1352 // if the object referenced by the accumulator is true when the object is cast |
| 1353 // to boolean. |
| 1354 void Interpreter::DoJumpIfToBooleanTrueConstantWide( |
| 1355 compiler::InterpreterAssembler* assembler) { |
| 1356 DoJumpIfToBooleanTrueConstant(assembler); |
| 1357 } |
| 1358 |
| 1359 |
| 1319 // JumpIfToBooleanFalse <imm8> | 1360 // JumpIfToBooleanFalse <imm8> |
| 1320 // | 1361 // |
| 1321 // Jump by number of bytes represented by an immediate operand if the object | 1362 // Jump by number of bytes represented by an immediate operand if the object |
| 1322 // referenced by the accumulator is false when the object is cast to boolean. | 1363 // referenced by the accumulator is false when the object is cast to boolean. |
| 1323 void Interpreter::DoJumpIfToBooleanFalse( | 1364 void Interpreter::DoJumpIfToBooleanFalse( |
| 1324 compiler::InterpreterAssembler* assembler) { | 1365 compiler::InterpreterAssembler* assembler) { |
| 1325 Node* accumulator = __ GetAccumulator(); | 1366 Node* accumulator = __ GetAccumulator(); |
| 1326 Node* to_boolean_value = | 1367 Node* to_boolean_value = |
| 1327 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); | 1368 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); |
| 1328 Node* relative_jump = __ BytecodeOperandImm(0); | 1369 Node* relative_jump = __ BytecodeOperandImm(0); |
| 1329 Node* false_value = __ BooleanConstant(false); | 1370 Node* false_value = __ BooleanConstant(false); |
| 1330 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump); | 1371 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump); |
| 1331 } | 1372 } |
| 1332 | 1373 |
| 1333 | 1374 |
| 1334 // JumpIfToBooleanFalseConstant <idx> | 1375 // JumpIfToBooleanFalseConstant <idx8> |
| 1335 // | 1376 // |
| 1336 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool | 1377 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool |
| 1337 // if the object referenced by the accumulator is false when the object is cast | 1378 // if the object referenced by the accumulator is false when the object is cast |
| 1338 // to boolean. | 1379 // to boolean. |
| 1339 void Interpreter::DoJumpIfToBooleanFalseConstant( | 1380 void Interpreter::DoJumpIfToBooleanFalseConstant( |
| 1340 compiler::InterpreterAssembler* assembler) { | 1381 compiler::InterpreterAssembler* assembler) { |
| 1341 Node* accumulator = __ GetAccumulator(); | 1382 Node* accumulator = __ GetAccumulator(); |
| 1342 Node* to_boolean_value = | 1383 Node* to_boolean_value = |
| 1343 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); | 1384 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); |
| 1344 Node* index = __ BytecodeOperandIdx(0); | 1385 Node* index = __ BytecodeOperandIdx(0); |
| 1345 Node* constant = __ LoadConstantPoolEntry(index); | 1386 Node* constant = __ LoadConstantPoolEntry(index); |
| 1346 Node* relative_jump = __ SmiUntag(constant); | 1387 Node* relative_jump = __ SmiUntag(constant); |
| 1347 Node* false_value = __ BooleanConstant(false); | 1388 Node* false_value = __ BooleanConstant(false); |
| 1348 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump); | 1389 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump); |
| 1349 } | 1390 } |
| 1350 | 1391 |
| 1351 | 1392 |
| 1393 // JumpIfToBooleanFalseConstantWide <idx16> |
| 1394 // |
| 1395 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool |
| 1396 // if the object referenced by the accumulator is false when the object is cast |
| 1397 // to boolean. |
| 1398 void Interpreter::DoJumpIfToBooleanFalseConstantWide( |
| 1399 compiler::InterpreterAssembler* assembler) { |
| 1400 DoJumpIfToBooleanFalseConstant(assembler); |
| 1401 } |
| 1402 |
| 1403 |
| 1352 // JumpIfNull <imm8> | 1404 // JumpIfNull <imm8> |
| 1353 // | 1405 // |
| 1354 // Jump by number of bytes represented by an immediate operand if the object | 1406 // Jump by number of bytes represented by an immediate operand if the object |
| 1355 // referenced by the accumulator is the null constant. | 1407 // referenced by the accumulator is the null constant. |
| 1356 void Interpreter::DoJumpIfNull(compiler::InterpreterAssembler* assembler) { | 1408 void Interpreter::DoJumpIfNull(compiler::InterpreterAssembler* assembler) { |
| 1357 Node* accumulator = __ GetAccumulator(); | 1409 Node* accumulator = __ GetAccumulator(); |
| 1358 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); | 1410 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); |
| 1359 Node* relative_jump = __ BytecodeOperandImm(0); | 1411 Node* relative_jump = __ BytecodeOperandImm(0); |
| 1360 __ JumpIfWordEqual(accumulator, null_value, relative_jump); | 1412 __ JumpIfWordEqual(accumulator, null_value, relative_jump); |
| 1361 } | 1413 } |
| 1362 | 1414 |
| 1363 | 1415 |
| 1364 // JumpIfNullConstant <idx> | 1416 // JumpIfNullConstant <idx8> |
| 1365 // | 1417 // |
| 1366 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool | 1418 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool |
| 1367 // if the object referenced by the accumulator is the null constant. | 1419 // if the object referenced by the accumulator is the null constant. |
| 1368 void Interpreter::DoJumpIfNullConstant( | 1420 void Interpreter::DoJumpIfNullConstant( |
| 1369 compiler::InterpreterAssembler* assembler) { | 1421 compiler::InterpreterAssembler* assembler) { |
| 1370 Node* accumulator = __ GetAccumulator(); | 1422 Node* accumulator = __ GetAccumulator(); |
| 1371 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); | 1423 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); |
| 1372 Node* index = __ BytecodeOperandIdx(0); | 1424 Node* index = __ BytecodeOperandIdx(0); |
| 1373 Node* constant = __ LoadConstantPoolEntry(index); | 1425 Node* constant = __ LoadConstantPoolEntry(index); |
| 1374 Node* relative_jump = __ SmiUntag(constant); | 1426 Node* relative_jump = __ SmiUntag(constant); |
| 1375 __ JumpIfWordEqual(accumulator, null_value, relative_jump); | 1427 __ JumpIfWordEqual(accumulator, null_value, relative_jump); |
| 1376 } | 1428 } |
| 1377 | 1429 |
| 1378 | 1430 |
| 1379 // JumpIfUndefined <imm8> | 1431 // JumpIfNullConstantWide <idx16> |
| 1432 // |
| 1433 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool |
| 1434 // if the object referenced by the accumulator is the null constant. |
| 1435 void Interpreter::DoJumpIfNullConstantWide( |
| 1436 compiler::InterpreterAssembler* assembler) { |
| 1437 DoJumpIfNullConstant(assembler); |
| 1438 } |
| 1439 |
| 1440 |
| 1441 // jumpifundefined <imm8> |
| 1380 // | 1442 // |
| 1381 // Jump by number of bytes represented by an immediate operand if the object | 1443 // Jump by number of bytes represented by an immediate operand if the object |
| 1382 // referenced by the accumulator is the undefined constant. | 1444 // referenced by the accumulator is the undefined constant. |
| 1383 void Interpreter::DoJumpIfUndefined(compiler::InterpreterAssembler* assembler) { | 1445 void Interpreter::DoJumpIfUndefined(compiler::InterpreterAssembler* assembler) { |
| 1384 Node* accumulator = __ GetAccumulator(); | 1446 Node* accumulator = __ GetAccumulator(); |
| 1385 Node* undefined_value = | 1447 Node* undefined_value = |
| 1386 __ HeapConstant(isolate_->factory()->undefined_value()); | 1448 __ HeapConstant(isolate_->factory()->undefined_value()); |
| 1387 Node* relative_jump = __ BytecodeOperandImm(0); | 1449 Node* relative_jump = __ BytecodeOperandImm(0); |
| 1388 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); | 1450 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); |
| 1389 } | 1451 } |
| 1390 | 1452 |
| 1391 | 1453 |
| 1392 // JumpIfUndefinedConstant <idx> | 1454 // JumpIfUndefinedConstant <idx8> |
| 1393 // | 1455 // |
| 1394 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool | 1456 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool |
| 1395 // if the object referenced by the accumulator is the undefined constant. | 1457 // if the object referenced by the accumulator is the undefined constant. |
| 1396 void Interpreter::DoJumpIfUndefinedConstant( | 1458 void Interpreter::DoJumpIfUndefinedConstant( |
| 1397 compiler::InterpreterAssembler* assembler) { | 1459 compiler::InterpreterAssembler* assembler) { |
| 1398 Node* accumulator = __ GetAccumulator(); | 1460 Node* accumulator = __ GetAccumulator(); |
| 1399 Node* undefined_value = | 1461 Node* undefined_value = |
| 1400 __ HeapConstant(isolate_->factory()->undefined_value()); | 1462 __ HeapConstant(isolate_->factory()->undefined_value()); |
| 1401 Node* index = __ BytecodeOperandIdx(0); | 1463 Node* index = __ BytecodeOperandIdx(0); |
| 1402 Node* constant = __ LoadConstantPoolEntry(index); | 1464 Node* constant = __ LoadConstantPoolEntry(index); |
| 1403 Node* relative_jump = __ SmiUntag(constant); | 1465 Node* relative_jump = __ SmiUntag(constant); |
| 1404 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); | 1466 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); |
| 1405 } | 1467 } |
| 1406 | 1468 |
| 1407 | 1469 |
| 1470 // JumpIfUndefinedConstantWide <idx16> |
| 1471 // |
| 1472 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool |
| 1473 // if the object referenced by the accumulator is the undefined constant. |
| 1474 void Interpreter::DoJumpIfUndefinedConstantWide( |
| 1475 compiler::InterpreterAssembler* assembler) { |
| 1476 DoJumpIfUndefinedConstant(assembler); |
| 1477 } |
| 1478 |
| 1479 |
| 1408 void Interpreter::DoCreateLiteral(Runtime::FunctionId function_id, | 1480 void Interpreter::DoCreateLiteral(Runtime::FunctionId function_id, |
| 1409 compiler::InterpreterAssembler* assembler) { | 1481 compiler::InterpreterAssembler* assembler) { |
| 1410 Node* index = __ BytecodeOperandIdx(0); | 1482 Node* index = __ BytecodeOperandIdx(0); |
| 1411 Node* constant_elements = __ LoadConstantPoolEntry(index); | 1483 Node* constant_elements = __ LoadConstantPoolEntry(index); |
| 1412 Node* literal_index_raw = __ BytecodeOperandIdx(1); | 1484 Node* literal_index_raw = __ BytecodeOperandIdx(1); |
| 1413 Node* literal_index = __ SmiTag(literal_index_raw); | 1485 Node* literal_index = __ SmiTag(literal_index_raw); |
| 1414 Node* flags_raw = __ BytecodeOperandImm(2); | 1486 Node* flags_raw = __ BytecodeOperandImm(2); |
| 1415 Node* flags = __ SmiTag(flags_raw); | 1487 Node* flags = __ SmiTag(flags_raw); |
| 1416 Node* closure = __ LoadRegister(Register::function_closure()); | 1488 Node* closure = __ LoadRegister(Register::function_closure()); |
| 1417 Node* result = __ CallRuntime(function_id, closure, literal_index, | 1489 Node* result = __ CallRuntime(function_id, closure, literal_index, |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1614 Node* index_reg = __ BytecodeOperandReg(0); | 1686 Node* index_reg = __ BytecodeOperandReg(0); |
| 1615 Node* index = __ LoadRegister(index_reg); | 1687 Node* index = __ LoadRegister(index_reg); |
| 1616 Node* result = __ CallRuntime(Runtime::kForInStep, index); | 1688 Node* result = __ CallRuntime(Runtime::kForInStep, index); |
| 1617 __ SetAccumulator(result); | 1689 __ SetAccumulator(result); |
| 1618 __ Dispatch(); | 1690 __ Dispatch(); |
| 1619 } | 1691 } |
| 1620 | 1692 |
| 1621 } // namespace interpreter | 1693 } // namespace interpreter |
| 1622 } // namespace internal | 1694 } // namespace internal |
| 1623 } // namespace v8 | 1695 } // namespace v8 |
| OLD | NEW |