Chromium Code Reviews| 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 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 381 } | 381 } |
| 382 | 382 |
| 383 Node* WasmGraphBuilder::Int32Constant(int32_t value) { | 383 Node* WasmGraphBuilder::Int32Constant(int32_t value) { |
| 384 return jsgraph()->Int32Constant(value); | 384 return jsgraph()->Int32Constant(value); |
| 385 } | 385 } |
| 386 | 386 |
| 387 Node* WasmGraphBuilder::Int64Constant(int64_t value) { | 387 Node* WasmGraphBuilder::Int64Constant(int64_t value) { |
| 388 return jsgraph()->Int64Constant(value); | 388 return jsgraph()->Int64Constant(value); |
| 389 } | 389 } |
| 390 | 390 |
| 391 void WasmGraphBuilder::StackCheck(wasm::WasmCodePosition position) { | |
| 392 // We do not generate stack checks for cctests. | |
| 393 if (module_ && !module_->instance->context.is_null()) { | |
| 394 Node* limit = graph()->NewNode( | |
| 395 jsgraph()->machine()->Load(MachineType::Pointer()), | |
| 396 jsgraph()->ExternalConstant( | |
| 397 ExternalReference::address_of_stack_limit(jsgraph()->isolate())), | |
| 398 jsgraph()->IntPtrConstant(0), *effect_, *control_); | |
| 399 Node* pointer = graph()->NewNode(jsgraph()->machine()->LoadStackPointer()); | |
| 400 | |
| 401 Node* check = | |
| 402 graph()->NewNode(jsgraph()->machine()->UintLessThan(), limit, pointer); | |
| 403 | |
| 404 Diamond stack_check(graph(), jsgraph()->common(), check, BranchHint::kTrue); | |
| 405 | |
| 406 Node* effect_true = *effect_; | |
| 407 | |
| 408 Node* effect_false; | |
| 409 // Generate a call to the runtime if there is a stack check failure. | |
| 410 { | |
| 411 Node* node = BuildCallToRuntime(Runtime::kStackGuard, jsgraph(), | |
| 412 module_->instance->context, nullptr, 0, | |
| 413 effect_, control_); | |
|
Michael Starzinger
2016/08/18 17:22:48
This should be s/control_/diamond.if_false/ here,
ahaas
2016/08/19 07:13:42
Thanks for noticing this. I fixed it now.
| |
| 414 effect_false = node; | |
| 415 } | |
| 416 | |
| 417 Node* ephi = graph()->NewNode(jsgraph()->common()->EffectPhi(2), | |
| 418 effect_true, effect_false, stack_check.merge); | |
| 419 | |
| 420 *control_ = stack_check.merge; | |
| 421 *effect_ = ephi; | |
| 422 } | |
| 423 } | |
| 424 | |
| 391 Node* WasmGraphBuilder::Binop(wasm::WasmOpcode opcode, Node* left, Node* right, | 425 Node* WasmGraphBuilder::Binop(wasm::WasmOpcode opcode, Node* left, Node* right, |
| 392 wasm::WasmCodePosition position) { | 426 wasm::WasmCodePosition position) { |
| 393 const Operator* op; | 427 const Operator* op; |
| 394 MachineOperatorBuilder* m = jsgraph()->machine(); | 428 MachineOperatorBuilder* m = jsgraph()->machine(); |
| 395 switch (opcode) { | 429 switch (opcode) { |
| 396 case wasm::kExprI32Add: | 430 case wasm::kExprI32Add: |
| 397 op = m->Int32Add(); | 431 op = m->Int32Add(); |
| 398 break; | 432 break; |
| 399 case wasm::kExprI32Sub: | 433 case wasm::kExprI32Sub: |
| 400 op = m->Int32Sub(); | 434 op = m->Int32Sub(); |
| (...skipping 2831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3232 function_->code_start_offset), | 3266 function_->code_start_offset), |
| 3233 compile_ms); | 3267 compile_ms); |
| 3234 } | 3268 } |
| 3235 | 3269 |
| 3236 return code; | 3270 return code; |
| 3237 } | 3271 } |
| 3238 | 3272 |
| 3239 } // namespace compiler | 3273 } // namespace compiler |
| 3240 } // namespace internal | 3274 } // namespace internal |
| 3241 } // namespace v8 | 3275 } // namespace v8 |
| OLD | NEW |