| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without | 
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are | 
| 4 // met: | 4 // met: | 
| 5 // | 5 // | 
| 6 //     * Redistributions of source code must retain the above copyright | 6 //     * Redistributions of source code must retain the above copyright | 
| 7 //       notice, this list of conditions and the following disclaimer. | 7 //       notice, this list of conditions and the following disclaimer. | 
| 8 //     * Redistributions in binary form must reproduce the above | 8 //     * Redistributions in binary form must reproduce the above | 
| 9 //       copyright notice, this list of conditions and the following | 9 //       copyright notice, this list of conditions and the following | 
| 10 //       disclaimer in the documentation and/or other materials provided | 10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 464 } | 464 } | 
| 465 | 465 | 
| 466 | 466 | 
| 467 void FullCodeGenerator::RecordTypeFeedbackCell( | 467 void FullCodeGenerator::RecordTypeFeedbackCell( | 
| 468     TypeFeedbackId id, Handle<JSGlobalPropertyCell> cell) { | 468     TypeFeedbackId id, Handle<JSGlobalPropertyCell> cell) { | 
| 469   TypeFeedbackCellEntry entry = { id, cell }; | 469   TypeFeedbackCellEntry entry = { id, cell }; | 
| 470   type_feedback_cells_.Add(entry, zone()); | 470   type_feedback_cells_.Add(entry, zone()); | 
| 471 } | 471 } | 
| 472 | 472 | 
| 473 | 473 | 
| 474 void FullCodeGenerator::RecordStackCheck(BailoutId ast_id) { | 474 void FullCodeGenerator::RecordBackEdge(BailoutId ast_id) { | 
| 475   // The pc offset does not need to be encoded and packed together with a | 475   // The pc offset does not need to be encoded and packed together with a state. | 
| 476   // state. |  | 
| 477   ASSERT(masm_->pc_offset() > 0); | 476   ASSERT(masm_->pc_offset() > 0); | 
| 478   BailoutEntry entry = { ast_id, static_cast<unsigned>(masm_->pc_offset()) }; | 477   BailoutEntry entry = { ast_id, static_cast<unsigned>(masm_->pc_offset()) }; | 
| 479   stack_checks_.Add(entry, zone()); | 478   stack_checks_.Add(entry, zone()); | 
| 480 } | 479 } | 
| 481 | 480 | 
| 482 | 481 | 
| 483 bool FullCodeGenerator::ShouldInlineSmiCase(Token::Value op) { | 482 bool FullCodeGenerator::ShouldInlineSmiCase(Token::Value op) { | 
| 484   // Inline smi case inside loops, but not division and modulo which | 483   // Inline smi case inside loops, but not division and modulo which | 
| 485   // are too complicated and take up too much space. | 484   // are too complicated and take up too much space. | 
| 486   if (op == Token::DIV ||op == Token::MOD) return false; | 485   if (op == Token::DIV ||op == Token::MOD) return false; | 
| (...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1262   PrepareForBailoutForId(stmt->ContinueId(), NO_REGISTERS); | 1261   PrepareForBailoutForId(stmt->ContinueId(), NO_REGISTERS); | 
| 1263   SetExpressionPosition(stmt->cond(), stmt->condition_position()); | 1262   SetExpressionPosition(stmt->cond(), stmt->condition_position()); | 
| 1264   VisitForControl(stmt->cond(), | 1263   VisitForControl(stmt->cond(), | 
| 1265                   &stack_check, | 1264                   &stack_check, | 
| 1266                   loop_statement.break_label(), | 1265                   loop_statement.break_label(), | 
| 1267                   &stack_check); | 1266                   &stack_check); | 
| 1268 | 1267 | 
| 1269   // Check stack before looping. | 1268   // Check stack before looping. | 
| 1270   PrepareForBailoutForId(stmt->BackEdgeId(), NO_REGISTERS); | 1269   PrepareForBailoutForId(stmt->BackEdgeId(), NO_REGISTERS); | 
| 1271   __ bind(&stack_check); | 1270   __ bind(&stack_check); | 
| 1272   EmitStackCheck(stmt, &body); | 1271   EmitBackEdgeBookkeeping(stmt, &body); | 
| 1273   __ jmp(&body); | 1272   __ jmp(&body); | 
| 1274 | 1273 | 
| 1275   PrepareForBailoutForId(stmt->ExitId(), NO_REGISTERS); | 1274   PrepareForBailoutForId(stmt->ExitId(), NO_REGISTERS); | 
| 1276   __ bind(loop_statement.break_label()); | 1275   __ bind(loop_statement.break_label()); | 
| 1277   decrement_loop_depth(); | 1276   decrement_loop_depth(); | 
| 1278 } | 1277 } | 
| 1279 | 1278 | 
| 1280 | 1279 | 
| 1281 void FullCodeGenerator::VisitWhileStatement(WhileStatement* stmt) { | 1280 void FullCodeGenerator::VisitWhileStatement(WhileStatement* stmt) { | 
| 1282   Comment cmnt(masm_, "[ WhileStatement"); | 1281   Comment cmnt(masm_, "[ WhileStatement"); | 
| 1283   Label test, body; | 1282   Label test, body; | 
| 1284 | 1283 | 
| 1285   Iteration loop_statement(this, stmt); | 1284   Iteration loop_statement(this, stmt); | 
| 1286   increment_loop_depth(); | 1285   increment_loop_depth(); | 
| 1287 | 1286 | 
| 1288   // Emit the test at the bottom of the loop. | 1287   // Emit the test at the bottom of the loop. | 
| 1289   __ jmp(&test); | 1288   __ jmp(&test); | 
| 1290 | 1289 | 
| 1291   PrepareForBailoutForId(stmt->BodyId(), NO_REGISTERS); | 1290   PrepareForBailoutForId(stmt->BodyId(), NO_REGISTERS); | 
| 1292   __ bind(&body); | 1291   __ bind(&body); | 
| 1293   Visit(stmt->body()); | 1292   Visit(stmt->body()); | 
| 1294 | 1293 | 
| 1295   // Emit the statement position here as this is where the while | 1294   // Emit the statement position here as this is where the while | 
| 1296   // statement code starts. | 1295   // statement code starts. | 
| 1297   __ bind(loop_statement.continue_label()); | 1296   __ bind(loop_statement.continue_label()); | 
| 1298   SetStatementPosition(stmt); | 1297   SetStatementPosition(stmt); | 
| 1299 | 1298 | 
| 1300   // Check stack before looping. | 1299   // Check stack before looping. | 
| 1301   EmitStackCheck(stmt, &body); | 1300   EmitBackEdgeBookkeeping(stmt, &body); | 
| 1302 | 1301 | 
| 1303   __ bind(&test); | 1302   __ bind(&test); | 
| 1304   VisitForControl(stmt->cond(), | 1303   VisitForControl(stmt->cond(), | 
| 1305                   &body, | 1304                   &body, | 
| 1306                   loop_statement.break_label(), | 1305                   loop_statement.break_label(), | 
| 1307                   loop_statement.break_label()); | 1306                   loop_statement.break_label()); | 
| 1308 | 1307 | 
| 1309   PrepareForBailoutForId(stmt->ExitId(), NO_REGISTERS); | 1308   PrepareForBailoutForId(stmt->ExitId(), NO_REGISTERS); | 
| 1310   __ bind(loop_statement.break_label()); | 1309   __ bind(loop_statement.break_label()); | 
| 1311   decrement_loop_depth(); | 1310   decrement_loop_depth(); | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 1337   __ bind(loop_statement.continue_label()); | 1336   __ bind(loop_statement.continue_label()); | 
| 1338   if (stmt->next() != NULL) { | 1337   if (stmt->next() != NULL) { | 
| 1339     Visit(stmt->next()); | 1338     Visit(stmt->next()); | 
| 1340   } | 1339   } | 
| 1341 | 1340 | 
| 1342   // Emit the statement position here as this is where the for | 1341   // Emit the statement position here as this is where the for | 
| 1343   // statement code starts. | 1342   // statement code starts. | 
| 1344   SetStatementPosition(stmt); | 1343   SetStatementPosition(stmt); | 
| 1345 | 1344 | 
| 1346   // Check stack before looping. | 1345   // Check stack before looping. | 
| 1347   EmitStackCheck(stmt, &body); | 1346   EmitBackEdgeBookkeeping(stmt, &body); | 
| 1348 | 1347 | 
| 1349   __ bind(&test); | 1348   __ bind(&test); | 
| 1350   if (stmt->cond() != NULL) { | 1349   if (stmt->cond() != NULL) { | 
| 1351     VisitForControl(stmt->cond(), | 1350     VisitForControl(stmt->cond(), | 
| 1352                     &body, | 1351                     &body, | 
| 1353                     loop_statement.break_label(), | 1352                     loop_statement.break_label(), | 
| 1354                     loop_statement.break_label()); | 1353                     loop_statement.break_label()); | 
| 1355   } else { | 1354   } else { | 
| 1356     __ jmp(&body); | 1355     __ jmp(&body); | 
| 1357   } | 1356   } | 
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1579   } | 1578   } | 
| 1580 | 1579 | 
| 1581   return false; | 1580   return false; | 
| 1582 } | 1581 } | 
| 1583 | 1582 | 
| 1584 | 1583 | 
| 1585 #undef __ | 1584 #undef __ | 
| 1586 | 1585 | 
| 1587 | 1586 | 
| 1588 } }  // namespace v8::internal | 1587 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|