| 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 1365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1376 return MatchMul(expr); | 1376 return MatchMul(expr); |
| 1377 default: | 1377 default: |
| 1378 return kNone; | 1378 return kNone; |
| 1379 } | 1379 } |
| 1380 } | 1380 } |
| 1381 | 1381 |
| 1382 // Work around Mul + Div being defined in PPC assembler. | 1382 // Work around Mul + Div being defined in PPC assembler. |
| 1383 #ifdef Mul | 1383 #ifdef Mul |
| 1384 #undef Mul | 1384 #undef Mul |
| 1385 #endif | 1385 #endif |
| 1386 #ifdef Div | |
| 1387 #undef Div | |
| 1388 #endif | |
| 1389 | 1386 |
| 1390 #define NON_SIGNED_BINOP(op) \ | 1387 #define NON_SIGNED_BINOP(op) \ |
| 1391 static WasmOpcode opcodes[] = { \ | 1388 static WasmOpcode opcodes[] = { \ |
| 1392 kExprI32##op, \ | 1389 kExprI32##op, \ |
| 1393 kExprI32##op, \ | 1390 kExprI32##op, \ |
| 1394 kExprF32##op, \ | 1391 kExprF32##op, \ |
| 1395 kExprF64##op \ | 1392 kExprF64##op \ |
| 1396 } | 1393 } |
| 1397 | 1394 |
| 1398 #define SIGNED_BINOP(op) \ | 1395 #define SIGNED_BINOP(op) \ |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1457 RECURSE(Visit(expr->right())); | 1454 RECURSE(Visit(expr->right())); |
| 1458 | 1455 |
| 1459 if (expr->op() == Token::COMMA) { | 1456 if (expr->op() == Token::COMMA) { |
| 1460 current_function_builder_->Emit(kExprEnd); | 1457 current_function_builder_->Emit(kExprEnd); |
| 1461 } | 1458 } |
| 1462 | 1459 |
| 1463 switch (expr->op()) { | 1460 switch (expr->op()) { |
| 1464 BINOP_CASE(Token::ADD, Add, NON_SIGNED_BINOP, true); | 1461 BINOP_CASE(Token::ADD, Add, NON_SIGNED_BINOP, true); |
| 1465 BINOP_CASE(Token::SUB, Sub, NON_SIGNED_BINOP, true); | 1462 BINOP_CASE(Token::SUB, Sub, NON_SIGNED_BINOP, true); |
| 1466 BINOP_CASE(Token::MUL, Mul, NON_SIGNED_BINOP, true); | 1463 BINOP_CASE(Token::MUL, Mul, NON_SIGNED_BINOP, true); |
| 1467 BINOP_CASE(Token::DIV, Div, SIGNED_BINOP, false); | |
| 1468 BINOP_CASE(Token::BIT_OR, Ior, NON_SIGNED_INT_BINOP, true); | 1464 BINOP_CASE(Token::BIT_OR, Ior, NON_SIGNED_INT_BINOP, true); |
| 1469 BINOP_CASE(Token::BIT_AND, And, NON_SIGNED_INT_BINOP, true); | 1465 BINOP_CASE(Token::BIT_AND, And, NON_SIGNED_INT_BINOP, true); |
| 1470 BINOP_CASE(Token::BIT_XOR, Xor, NON_SIGNED_INT_BINOP, true); | 1466 BINOP_CASE(Token::BIT_XOR, Xor, NON_SIGNED_INT_BINOP, true); |
| 1471 BINOP_CASE(Token::SHL, Shl, NON_SIGNED_INT_BINOP, true); | 1467 BINOP_CASE(Token::SHL, Shl, NON_SIGNED_INT_BINOP, true); |
| 1472 BINOP_CASE(Token::SAR, ShrS, NON_SIGNED_INT_BINOP, true); | 1468 BINOP_CASE(Token::SAR, ShrS, NON_SIGNED_INT_BINOP, true); |
| 1473 BINOP_CASE(Token::SHR, ShrU, NON_SIGNED_INT_BINOP, true); | 1469 BINOP_CASE(Token::SHR, ShrU, NON_SIGNED_INT_BINOP, true); |
| 1470 case Token::DIV: { |
| 1471 static WasmOpcode opcodes[] = {kExprI32AsmjsDivS, kExprI32AsmjsDivU, |
| 1472 kExprF32Div, kExprF64Div}; |
| 1473 int type = TypeIndexOf(expr->left(), expr->right(), false); |
| 1474 current_function_builder_->Emit(opcodes[type]); |
| 1475 break; |
| 1476 } |
| 1474 case Token::MOD: { | 1477 case Token::MOD: { |
| 1475 TypeIndex type = TypeIndexOf(expr->left(), expr->right(), false); | 1478 TypeIndex type = TypeIndexOf(expr->left(), expr->right(), false); |
| 1476 if (type == kInt32) { | 1479 if (type == kInt32) { |
| 1477 current_function_builder_->Emit(kExprI32RemS); | 1480 current_function_builder_->Emit(kExprI32AsmjsRemS); |
| 1478 } else if (type == kUint32) { | 1481 } else if (type == kUint32) { |
| 1479 current_function_builder_->Emit(kExprI32RemU); | 1482 current_function_builder_->Emit(kExprI32AsmjsRemU); |
| 1480 } else if (type == kFloat64) { | 1483 } else if (type == kFloat64) { |
| 1481 current_function_builder_->Emit(kExprF64Mod); | 1484 current_function_builder_->Emit(kExprF64Mod); |
| 1482 return; | 1485 return; |
| 1483 } else { | 1486 } else { |
| 1484 UNREACHABLE(); | 1487 UNREACHABLE(); |
| 1485 } | 1488 } |
| 1486 break; | 1489 break; |
| 1487 } | 1490 } |
| 1488 case Token::COMMA: { | 1491 case Token::COMMA: { |
| 1489 break; | 1492 break; |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1701 // that zone in constructor may be thrown away once wasm module is written. | 1704 // that zone in constructor may be thrown away once wasm module is written. |
| 1702 WasmModuleIndex* AsmWasmBuilder::Run() { | 1705 WasmModuleIndex* AsmWasmBuilder::Run() { |
| 1703 AsmWasmBuilderImpl impl(isolate_, zone_, literal_, foreign_, typer_); | 1706 AsmWasmBuilderImpl impl(isolate_, zone_, literal_, foreign_, typer_); |
| 1704 impl.Compile(); | 1707 impl.Compile(); |
| 1705 WasmModuleWriter* writer = impl.builder_->Build(zone_); | 1708 WasmModuleWriter* writer = impl.builder_->Build(zone_); |
| 1706 return writer->WriteTo(zone_); | 1709 return writer->WriteTo(zone_); |
| 1707 } | 1710 } |
| 1708 } // namespace wasm | 1711 } // namespace wasm |
| 1709 } // namespace internal | 1712 } // namespace internal |
| 1710 } // namespace v8 | 1713 } // namespace v8 |
| OLD | NEW |