| 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/compiler/wasm-compiler.h" | 5 #include "src/compiler/wasm-compiler.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "src/isolate-inl.h" | 9 #include "src/isolate-inl.h" |
| 10 | 10 |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 switch (type) { | 199 switch (type) { |
| 200 case wasm::kAstI32: | 200 case wasm::kAstI32: |
| 201 return jsgraph()->Int32Constant(0xdeadbeef); | 201 return jsgraph()->Int32Constant(0xdeadbeef); |
| 202 case wasm::kAstI64: | 202 case wasm::kAstI64: |
| 203 return jsgraph()->Int64Constant(0xdeadbeefdeadbeef); | 203 return jsgraph()->Int64Constant(0xdeadbeefdeadbeef); |
| 204 case wasm::kAstF32: | 204 case wasm::kAstF32: |
| 205 return jsgraph()->Float32Constant(bit_cast<float>(0xdeadbeef)); | 205 return jsgraph()->Float32Constant(bit_cast<float>(0xdeadbeef)); |
| 206 case wasm::kAstF64: | 206 case wasm::kAstF64: |
| 207 return jsgraph()->Float64Constant(bit_cast<double>(0xdeadbeefdeadbeef)); | 207 return jsgraph()->Float64Constant(bit_cast<double>(0xdeadbeefdeadbeef)); |
| 208 break; | 208 break; |
| 209 case wasm::kAstS128: |
| 210 return builder_->CreateS128Value(0xdeadbeef); |
| 211 break; |
| 209 default: | 212 default: |
| 210 UNREACHABLE(); | 213 UNREACHABLE(); |
| 211 return nullptr; | 214 return nullptr; |
| 212 } | 215 } |
| 213 } | 216 } |
| 214 | 217 |
| 215 private: | 218 private: |
| 216 WasmGraphBuilder* builder_; | 219 WasmGraphBuilder* builder_; |
| 217 JSGraph* jsgraph_; | 220 JSGraph* jsgraph_; |
| 218 Graph* graph_; | 221 Graph* graph_; |
| (...skipping 2069 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2288 Node* control = graph()->NewNode(common->Merge(2), if_smi, if_box); | 2291 Node* control = graph()->NewNode(common->Merge(2), if_smi, if_box); |
| 2289 value = graph()->NewNode(common->Phi(MachineRepresentation::kTagged, 2), vsmi, | 2292 value = graph()->NewNode(common->Phi(MachineRepresentation::kTagged, 2), vsmi, |
| 2290 vbox, control); | 2293 vbox, control); |
| 2291 return value; | 2294 return value; |
| 2292 } | 2295 } |
| 2293 | 2296 |
| 2294 Node* WasmGraphBuilder::ToJS(Node* node, wasm::LocalType type) { | 2297 Node* WasmGraphBuilder::ToJS(Node* node, wasm::LocalType type) { |
| 2295 switch (type) { | 2298 switch (type) { |
| 2296 case wasm::kAstI32: | 2299 case wasm::kAstI32: |
| 2297 return BuildChangeInt32ToTagged(node); | 2300 return BuildChangeInt32ToTagged(node); |
| 2301 case wasm::kAstS128: |
| 2298 case wasm::kAstI64: | 2302 case wasm::kAstI64: |
| 2299 // Throw a TypeError. The native context is good enough here because we | 2303 // Throw a TypeError. The native context is good enough here because we |
| 2300 // only throw a TypeError. | 2304 // only throw a TypeError. |
| 2301 return BuildCallToRuntime(Runtime::kWasmThrowTypeError, jsgraph(), | 2305 return BuildCallToRuntime(Runtime::kWasmThrowTypeError, jsgraph(), |
| 2302 jsgraph()->isolate()->native_context(), nullptr, | 2306 jsgraph()->isolate()->native_context(), nullptr, |
| 2303 0, effect_, *control_); | 2307 0, effect_, *control_); |
| 2304 case wasm::kAstF32: | 2308 case wasm::kAstF32: |
| 2305 node = graph()->NewNode(jsgraph()->machine()->ChangeFloat32ToFloat64(), | 2309 node = graph()->NewNode(jsgraph()->machine()->ChangeFloat32ToFloat64(), |
| 2306 node); | 2310 node); |
| 2307 return BuildChangeFloat64ToTagged(node); | 2311 return BuildChangeFloat64ToTagged(node); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2450 // Change representation. | 2454 // Change representation. |
| 2451 SimplifiedOperatorBuilder simplified(jsgraph()->zone()); | 2455 SimplifiedOperatorBuilder simplified(jsgraph()->zone()); |
| 2452 num = BuildChangeTaggedToFloat64(num); | 2456 num = BuildChangeTaggedToFloat64(num); |
| 2453 | 2457 |
| 2454 switch (type) { | 2458 switch (type) { |
| 2455 case wasm::kAstI32: { | 2459 case wasm::kAstI32: { |
| 2456 num = graph()->NewNode(jsgraph()->machine()->TruncateFloat64ToWord32(), | 2460 num = graph()->NewNode(jsgraph()->machine()->TruncateFloat64ToWord32(), |
| 2457 num); | 2461 num); |
| 2458 break; | 2462 break; |
| 2459 } | 2463 } |
| 2464 case wasm::kAstS128: |
| 2460 case wasm::kAstI64: | 2465 case wasm::kAstI64: |
| 2461 // Throw a TypeError. The native context is good enough here because we | 2466 // Throw a TypeError. The native context is good enough here because we |
| 2462 // only throw a TypeError. | 2467 // only throw a TypeError. |
| 2463 return BuildCallToRuntime(Runtime::kWasmThrowTypeError, jsgraph(), | 2468 return BuildCallToRuntime(Runtime::kWasmThrowTypeError, jsgraph(), |
| 2464 jsgraph()->isolate()->native_context(), nullptr, | 2469 jsgraph()->isolate()->native_context(), nullptr, |
| 2465 0, effect_, *control_); | 2470 0, effect_, *control_); |
| 2466 case wasm::kAstF32: | 2471 case wasm::kAstF32: |
| 2467 num = graph()->NewNode(jsgraph()->machine()->TruncateFloat64ToFloat32(), | 2472 num = graph()->NewNode(jsgraph()->machine()->TruncateFloat64ToFloat32(), |
| 2468 num); | 2473 num); |
| 2469 break; | 2474 break; |
| (...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3017 } | 3022 } |
| 3018 | 3023 |
| 3019 void WasmGraphBuilder::SetSourcePosition(Node* node, | 3024 void WasmGraphBuilder::SetSourcePosition(Node* node, |
| 3020 wasm::WasmCodePosition position) { | 3025 wasm::WasmCodePosition position) { |
| 3021 DCHECK_NE(position, wasm::kNoCodePosition); | 3026 DCHECK_NE(position, wasm::kNoCodePosition); |
| 3022 compiler::SourcePosition pos(position); | 3027 compiler::SourcePosition pos(position); |
| 3023 if (source_position_table_) | 3028 if (source_position_table_) |
| 3024 source_position_table_->SetSourcePosition(node, pos); | 3029 source_position_table_->SetSourcePosition(node, pos); |
| 3025 } | 3030 } |
| 3026 | 3031 |
| 3027 Node* WasmGraphBuilder::DefaultS128Value() { | 3032 Node* WasmGraphBuilder::CreateS128Value(int32_t value) { |
| 3028 // TODO(gdeepti): Introduce Simd128Constant to common-operator.h and use | 3033 // TODO(gdeepti): Introduce Simd128Constant to common-operator.h and use |
| 3029 // instead of creating a SIMD Value. | 3034 // instead of creating a SIMD Value. |
| 3030 return graph()->NewNode(jsgraph()->machine()->CreateInt32x4(), | 3035 return graph()->NewNode(jsgraph()->machine()->CreateInt32x4(), |
| 3031 Int32Constant(0), Int32Constant(0), Int32Constant(0), | 3036 Int32Constant(value), Int32Constant(value), |
| 3032 Int32Constant(0)); | 3037 Int32Constant(value), Int32Constant(value)); |
| 3033 } | 3038 } |
| 3034 | 3039 |
| 3035 Node* WasmGraphBuilder::SimdOp(wasm::WasmOpcode opcode, | 3040 Node* WasmGraphBuilder::SimdOp(wasm::WasmOpcode opcode, |
| 3036 const NodeVector& inputs) { | 3041 const NodeVector& inputs) { |
| 3037 switch (opcode) { | 3042 switch (opcode) { |
| 3038 case wasm::kExprI32x4Splat: | 3043 case wasm::kExprI32x4Splat: |
| 3039 return graph()->NewNode(jsgraph()->machine()->CreateInt32x4(), inputs[0], | 3044 return graph()->NewNode(jsgraph()->machine()->CreateInt32x4(), inputs[0], |
| 3040 inputs[0], inputs[0], inputs[0]); | 3045 inputs[0], inputs[0], inputs[0]); |
| 3041 default: | 3046 default: |
| 3042 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr); | 3047 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr); |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3402 function_->code_start_offset), | 3407 function_->code_start_offset), |
| 3403 compile_ms); | 3408 compile_ms); |
| 3404 } | 3409 } |
| 3405 | 3410 |
| 3406 return code; | 3411 return code; |
| 3407 } | 3412 } |
| 3408 | 3413 |
| 3409 } // namespace compiler | 3414 } // namespace compiler |
| 3410 } // namespace internal | 3415 } // namespace internal |
| 3411 } // namespace v8 | 3416 } // namespace v8 |
| OLD | NEW |