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 27 matching lines...) Expand all Loading... | |
| 38 | 38 |
| 39 // TODO(titzer): pull WASM_64 up to a common header. | 39 // TODO(titzer): pull WASM_64 up to a common header. |
| 40 #if !V8_TARGET_ARCH_32_BIT || V8_TARGET_ARCH_X64 | 40 #if !V8_TARGET_ARCH_32_BIT || V8_TARGET_ARCH_X64 |
| 41 #define WASM_64 1 | 41 #define WASM_64 1 |
| 42 #else | 42 #else |
| 43 #define WASM_64 0 | 43 #define WASM_64 0 |
| 44 #endif | 44 #endif |
| 45 | 45 |
| 46 namespace v8 { | 46 namespace v8 { |
| 47 namespace internal { | 47 namespace internal { |
| 48 | |
| 48 namespace compiler { | 49 namespace compiler { |
| 49 | 50 |
| 50 namespace { | 51 namespace { |
| 51 const Operator* UnsupportedOpcode(wasm::WasmOpcode opcode) { | 52 const Operator* UnsupportedOpcode(wasm::WasmOpcode opcode) { |
| 52 V8_Fatal(__FILE__, __LINE__, "Unsupported opcode #%d:%s", opcode, | 53 V8_Fatal(__FILE__, __LINE__, "Unsupported opcode #%d:%s", opcode, |
| 53 wasm::WasmOpcodes::OpcodeName(opcode)); | 54 wasm::WasmOpcodes::OpcodeName(opcode)); |
| 54 return nullptr; | 55 return nullptr; |
| 55 } | 56 } |
| 56 | 57 |
| 57 void MergeControlToEnd(JSGraph* jsgraph, Node* node) { | 58 void MergeControlToEnd(JSGraph* jsgraph, Node* node) { |
| (...skipping 2694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2752 } | 2753 } |
| 2753 | 2754 |
| 2754 | 2755 |
| 2755 Node* WasmGraphBuilder::LoadMem(wasm::LocalType type, MachineType memtype, | 2756 Node* WasmGraphBuilder::LoadMem(wasm::LocalType type, MachineType memtype, |
| 2756 Node* index, uint32_t offset, | 2757 Node* index, uint32_t offset, |
| 2757 uint32_t alignment, | 2758 uint32_t alignment, |
| 2758 wasm::WasmCodePosition position) { | 2759 wasm::WasmCodePosition position) { |
| 2759 Node* load; | 2760 Node* load; |
| 2760 | 2761 |
| 2761 // WASM semantics throw on OOB. Introduce explicit bounds check. | 2762 // WASM semantics throw on OOB. Introduce explicit bounds check. |
| 2762 BoundsCheckMem(memtype, index, offset, position); | 2763 if (!FLAG_wasm_trap_handler) { |
| 2764 BoundsCheckMem(memtype, index, offset, position); | |
| 2765 } | |
| 2763 bool aligned = static_cast<int>(alignment) >= | 2766 bool aligned = static_cast<int>(alignment) >= |
| 2764 ElementSizeLog2Of(memtype.representation()); | 2767 ElementSizeLog2Of(memtype.representation()); |
| 2765 | 2768 |
| 2766 if (aligned || | 2769 if (aligned || |
| 2767 jsgraph()->machine()->UnalignedLoadSupported(memtype, alignment)) { | 2770 jsgraph()->machine()->UnalignedLoadSupported(memtype, alignment)) { |
| 2768 load = graph()->NewNode(jsgraph()->machine()->Load(memtype), | 2771 if (!FLAG_wasm_trap_handler) { |
|
titzer
2016/09/08 17:06:35
Flip sense of if?
Eric Holk
2016/09/08 21:11:56
Done.
| |
| 2769 MemBuffer(offset), index, *effect_, *control_); | 2772 load = graph()->NewNode(jsgraph()->machine()->Load(memtype), |
| 2773 MemBuffer(offset), index, *effect_, *control_); | |
| 2774 } else { | |
| 2775 Node* context = HeapConstant(module_->instance->context); | |
| 2776 Node* position_node = jsgraph()->Int32Constant(position); | |
| 2777 load = graph()->NewNode(jsgraph()->machine()->ProtectedLoad(memtype), | |
| 2778 MemBuffer(offset), index, context, position_node, | |
| 2779 *effect_, *control_); | |
| 2780 } | |
| 2770 } else { | 2781 } else { |
| 2782 DCHECK(!FLAG_wasm_trap_handler); | |
| 2771 load = graph()->NewNode(jsgraph()->machine()->UnalignedLoad(memtype), | 2783 load = graph()->NewNode(jsgraph()->machine()->UnalignedLoad(memtype), |
| 2772 MemBuffer(offset), index, *effect_, *control_); | 2784 MemBuffer(offset), index, *effect_, *control_); |
| 2773 } | 2785 } |
| 2774 | 2786 |
| 2775 *effect_ = load; | 2787 *effect_ = load; |
| 2776 | 2788 |
| 2777 #if defined(V8_TARGET_BIG_ENDIAN) | 2789 #if defined(V8_TARGET_BIG_ENDIAN) |
| 2778 load = BuildChangeEndianness(load, memtype, type); | 2790 load = BuildChangeEndianness(load, memtype, type); |
| 2779 #endif | 2791 #endif |
| 2780 | 2792 |
| (...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3249 function_->code_start_offset), | 3261 function_->code_start_offset), |
| 3250 compile_ms); | 3262 compile_ms); |
| 3251 } | 3263 } |
| 3252 | 3264 |
| 3253 return code; | 3265 return code; |
| 3254 } | 3266 } |
| 3255 | 3267 |
| 3256 } // namespace compiler | 3268 } // namespace compiler |
| 3257 } // namespace internal | 3269 } // namespace internal |
| 3258 } // namespace v8 | 3270 } // namespace v8 |
| OLD | NEW |