Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(298)

Side by Side Diff: src/compiler/wasm-compiler.cc

Issue 2591903002: [wasm] sundry trap handler fixes (Closed)
Patch Set: Merge VisitLoad and VisitProtectedLoad Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/compiler/memory-optimizer.cc ('k') | src/compiler/x64/code-generator-x64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 3064 matching lines...) Expand 10 before | Expand all | Expand 10 after
3075 if (!FLAG_wasm_trap_handler || !kTrapHandlerSupported) { 3075 if (!FLAG_wasm_trap_handler || !kTrapHandlerSupported) {
3076 BoundsCheckMem(memtype, index, offset, position); 3076 BoundsCheckMem(memtype, index, offset, position);
3077 } 3077 }
3078 bool aligned = static_cast<int>(alignment) >= 3078 bool aligned = static_cast<int>(alignment) >=
3079 ElementSizeLog2Of(memtype.representation()); 3079 ElementSizeLog2Of(memtype.representation());
3080 3080
3081 if (aligned || 3081 if (aligned ||
3082 jsgraph()->machine()->UnalignedLoadSupported(memtype, alignment)) { 3082 jsgraph()->machine()->UnalignedLoadSupported(memtype, alignment)) {
3083 if (FLAG_wasm_trap_handler && kTrapHandlerSupported) { 3083 if (FLAG_wasm_trap_handler && kTrapHandlerSupported) {
3084 DCHECK(FLAG_wasm_guard_pages); 3084 DCHECK(FLAG_wasm_guard_pages);
3085 Node* context = HeapConstant(module_->instance->context);
3086 Node* position_node = jsgraph()->Int32Constant(position); 3085 Node* position_node = jsgraph()->Int32Constant(position);
3087 load = graph()->NewNode(jsgraph()->machine()->ProtectedLoad(memtype), 3086 load = graph()->NewNode(jsgraph()->machine()->ProtectedLoad(memtype),
3088 MemBuffer(offset), index, context, position_node, 3087 MemBuffer(offset), index, position_node, *effect_,
3089 *effect_, *control_); 3088 *control_);
3090 } else { 3089 } else {
3091 load = graph()->NewNode(jsgraph()->machine()->Load(memtype), 3090 load = graph()->NewNode(jsgraph()->machine()->Load(memtype),
3092 MemBuffer(offset), index, *effect_, *control_); 3091 MemBuffer(offset), index, *effect_, *control_);
3093 } 3092 }
3094 } else { 3093 } else {
3095 // TODO(eholk): Support unaligned loads with trap handlers. 3094 // TODO(eholk): Support unaligned loads with trap handlers.
3096 DCHECK(!FLAG_wasm_trap_handler || !kTrapHandlerSupported); 3095 DCHECK(!FLAG_wasm_trap_handler || !kTrapHandlerSupported);
3097 load = graph()->NewNode(jsgraph()->machine()->UnalignedLoad(memtype), 3096 load = graph()->NewNode(jsgraph()->machine()->UnalignedLoad(memtype),
3098 MemBuffer(offset), index, *effect_, *control_); 3097 MemBuffer(offset), index, *effect_, *control_);
3099 } 3098 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
3135 bool aligned = static_cast<int>(alignment) >= 3134 bool aligned = static_cast<int>(alignment) >=
3136 ElementSizeLog2Of(memtype.representation()); 3135 ElementSizeLog2Of(memtype.representation());
3137 3136
3138 #if defined(V8_TARGET_BIG_ENDIAN) 3137 #if defined(V8_TARGET_BIG_ENDIAN)
3139 val = BuildChangeEndianness(val, memtype); 3138 val = BuildChangeEndianness(val, memtype);
3140 #endif 3139 #endif
3141 3140
3142 if (aligned || 3141 if (aligned ||
3143 jsgraph()->machine()->UnalignedStoreSupported(memtype, alignment)) { 3142 jsgraph()->machine()->UnalignedStoreSupported(memtype, alignment)) {
3144 if (FLAG_wasm_trap_handler && kTrapHandlerSupported) { 3143 if (FLAG_wasm_trap_handler && kTrapHandlerSupported) {
3145 Node* context = HeapConstant(module_->instance->context);
3146 Node* position_node = jsgraph()->Int32Constant(position); 3144 Node* position_node = jsgraph()->Int32Constant(position);
3147 store = graph()->NewNode( 3145 store = graph()->NewNode(
3148 jsgraph()->machine()->ProtectedStore(memtype.representation()), 3146 jsgraph()->machine()->ProtectedStore(memtype.representation()),
3149 MemBuffer(offset), index, val, context, position_node, *effect_, 3147 MemBuffer(offset), index, val, position_node, *effect_, *control_);
3150 *control_);
3151 } else { 3148 } else {
3152 StoreRepresentation rep(memtype.representation(), kNoWriteBarrier); 3149 StoreRepresentation rep(memtype.representation(), kNoWriteBarrier);
3153 store = 3150 store =
3154 graph()->NewNode(jsgraph()->machine()->Store(rep), MemBuffer(offset), 3151 graph()->NewNode(jsgraph()->machine()->Store(rep), MemBuffer(offset),
3155 index, val, *effect_, *control_); 3152 index, val, *effect_, *control_);
3156 } 3153 }
3157 } else { 3154 } else {
3158 // TODO(eholk): Support unaligned stores with trap handlers. 3155 // TODO(eholk): Support unaligned stores with trap handlers.
3159 DCHECK(!FLAG_wasm_trap_handler || !kTrapHandlerSupported); 3156 DCHECK(!FLAG_wasm_trap_handler || !kTrapHandlerSupported);
3160 UnalignedStoreRepresentation rep(memtype.representation()); 3157 UnalignedStoreRepresentation rep(memtype.representation());
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after
3693 Smi::FromInt(instruction.instr_offset)); 3690 Smi::FromInt(instruction.instr_offset));
3694 fn_protected->set(Code::kTrapDataSize * i + Code::kTrapLandingOffset, 3691 fn_protected->set(Code::kTrapDataSize * i + Code::kTrapLandingOffset,
3695 Smi::FromInt(instruction.landing_offset)); 3692 Smi::FromInt(instruction.landing_offset));
3696 } 3693 }
3697 return fn_protected; 3694 return fn_protected;
3698 } 3695 }
3699 3696
3700 } // namespace compiler 3697 } // namespace compiler
3701 } // namespace internal 3698 } // namespace internal
3702 } // namespace v8 3699 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/memory-optimizer.cc ('k') | src/compiler/x64/code-generator-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698