| 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/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 // Required to get M_E etc. in MSVC. | 7 // Required to get M_E etc. in MSVC. |
| 8 #if defined(_WIN32) | 8 #if defined(_WIN32) |
| 9 #define _USE_MATH_DEFINES | 9 #define _USE_MATH_DEFINES |
| 10 #endif | 10 #endif |
| (...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 default: { return false; } | 503 default: { return false; } |
| 504 } | 504 } |
| 505 byte code[] = {WASM_F64(value)}; | 505 byte code[] = {WASM_F64(value)}; |
| 506 current_function_builder_->EmitCode(code, sizeof(code)); | 506 current_function_builder_->EmitCode(code, sizeof(code)); |
| 507 return true; | 507 return true; |
| 508 } | 508 } |
| 509 | 509 |
| 510 void VisitVariableProxy(VariableProxy* expr) { | 510 void VisitVariableProxy(VariableProxy* expr) { |
| 511 if (in_function_) { | 511 if (in_function_) { |
| 512 Variable* var = expr->var(); | 512 Variable* var = expr->var(); |
| 513 LocalType var_type = TypeOf(expr); |
| 513 if (is_set_op_) { | 514 if (is_set_op_) { |
| 515 is_set_op_ = false; |
| 514 if (var->IsContextSlot()) { | 516 if (var->IsContextSlot()) { |
| 515 current_function_builder_->Emit(kExprStoreGlobal); | 517 return current_function_builder_->EmitWithVarInt( |
| 518 kExprStoreGlobal, LookupOrInsertGlobal(var, var_type)); |
| 516 } else { | 519 } else { |
| 517 current_function_builder_->Emit(kExprSetLocal); | 520 return current_function_builder_->EmitSetLocal( |
| 521 LookupOrInsertLocal(var, var_type)); |
| 518 } | 522 } |
| 519 is_set_op_ = false; | |
| 520 } else { | 523 } else { |
| 521 if (VisitStdlibConstant(var)) { | 524 if (VisitStdlibConstant(var)) { |
| 522 return; | 525 return; |
| 523 } | 526 } |
| 524 if (var->IsContextSlot()) { | 527 if (var->IsContextSlot()) { |
| 525 current_function_builder_->Emit(kExprLoadGlobal); | 528 return current_function_builder_->EmitWithVarInt( |
| 529 kExprLoadGlobal, LookupOrInsertGlobal(var, var_type)); |
| 526 } else { | 530 } else { |
| 527 current_function_builder_->Emit(kExprGetLocal); | 531 return current_function_builder_->EmitGetLocal( |
| 532 LookupOrInsertLocal(var, var_type)); |
| 528 } | 533 } |
| 529 } | 534 } |
| 530 LocalType var_type = TypeOf(expr); | |
| 531 DCHECK_NE(kAstStmt, var_type); | |
| 532 if (var->IsContextSlot()) { | |
| 533 AddLeb128(LookupOrInsertGlobal(var, var_type), false); | |
| 534 } else { | |
| 535 AddLeb128(LookupOrInsertLocal(var, var_type), true); | |
| 536 } | |
| 537 } | 535 } |
| 538 } | 536 } |
| 539 | 537 |
| 540 void VisitLiteral(Literal* expr) { | 538 void VisitLiteral(Literal* expr) { |
| 541 Handle<Object> value = expr->value(); | 539 Handle<Object> value = expr->value(); |
| 542 if (!in_function_ || !value->IsNumber()) { | 540 if (!in_function_ || !value->IsNumber()) { |
| 543 return; | 541 return; |
| 544 } | 542 } |
| 545 Type* type = expr->bounds().upper; | 543 Type* type = expr->bounds().upper; |
| 546 if (type->Is(cache_.kAsmSigned)) { | 544 if (type->Is(cache_.kAsmSigned)) { |
| (...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1380 break; | 1378 break; |
| 1381 } | 1379 } |
| 1382 default: | 1380 default: |
| 1383 UNREACHABLE(); | 1381 UNREACHABLE(); |
| 1384 } | 1382 } |
| 1385 RECURSE(Visit(expr->left())); | 1383 RECURSE(Visit(expr->left())); |
| 1386 RECURSE(Visit(expr->right())); | 1384 RECURSE(Visit(expr->right())); |
| 1387 } | 1385 } |
| 1388 } | 1386 } |
| 1389 | 1387 |
| 1390 void AddLeb128(uint32_t index, bool is_local) { | |
| 1391 std::vector<uint8_t> index_vec = UnsignedLEB128From(index); | |
| 1392 if (is_local) { | |
| 1393 uint32_t pos_of_index[1] = {0}; | |
| 1394 current_function_builder_->EmitCode( | |
| 1395 &index_vec[0], static_cast<uint32_t>(index_vec.size()), pos_of_index, | |
| 1396 1); | |
| 1397 } else { | |
| 1398 current_function_builder_->EmitCode( | |
| 1399 &index_vec[0], static_cast<uint32_t>(index_vec.size())); | |
| 1400 } | |
| 1401 } | |
| 1402 | |
| 1403 void VisitCompareOperation(CompareOperation* expr) { | 1388 void VisitCompareOperation(CompareOperation* expr) { |
| 1404 switch (expr->op()) { | 1389 switch (expr->op()) { |
| 1405 BINOP_CASE(Token::EQ, Eq, NON_SIGNED_BINOP, false); | 1390 BINOP_CASE(Token::EQ, Eq, NON_SIGNED_BINOP, false); |
| 1406 BINOP_CASE(Token::LT, Lt, SIGNED_BINOP, false); | 1391 BINOP_CASE(Token::LT, Lt, SIGNED_BINOP, false); |
| 1407 BINOP_CASE(Token::LTE, Le, SIGNED_BINOP, false); | 1392 BINOP_CASE(Token::LTE, Le, SIGNED_BINOP, false); |
| 1408 BINOP_CASE(Token::GT, Gt, SIGNED_BINOP, false); | 1393 BINOP_CASE(Token::GT, Gt, SIGNED_BINOP, false); |
| 1409 BINOP_CASE(Token::GTE, Ge, SIGNED_BINOP, false); | 1394 BINOP_CASE(Token::GTE, Ge, SIGNED_BINOP, false); |
| 1410 default: | 1395 default: |
| 1411 UNREACHABLE(); | 1396 UNREACHABLE(); |
| 1412 } | 1397 } |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1610 // that zone in constructor may be thrown away once wasm module is written. | 1595 // that zone in constructor may be thrown away once wasm module is written. |
| 1611 WasmModuleIndex* AsmWasmBuilder::Run() { | 1596 WasmModuleIndex* AsmWasmBuilder::Run() { |
| 1612 AsmWasmBuilderImpl impl(isolate_, zone_, literal_, foreign_, typer_); | 1597 AsmWasmBuilderImpl impl(isolate_, zone_, literal_, foreign_, typer_); |
| 1613 impl.Compile(); | 1598 impl.Compile(); |
| 1614 WasmModuleWriter* writer = impl.builder_->Build(zone_); | 1599 WasmModuleWriter* writer = impl.builder_->Build(zone_); |
| 1615 return writer->WriteTo(zone_); | 1600 return writer->WriteTo(zone_); |
| 1616 } | 1601 } |
| 1617 } // namespace wasm | 1602 } // namespace wasm |
| 1618 } // namespace internal | 1603 } // namespace internal |
| 1619 } // namespace v8 | 1604 } // namespace v8 |
| OLD | NEW |