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

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

Issue 2887053003: MIPS[64]: Reland of `Fix unaligned arguments storage in Wasm-to-interpreter entry` (Closed)
Patch Set: Created 3 years, 7 months 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
« src/utils.h ('K') | « src/utils.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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 <unordered_map> 5 #include <unordered_map>
6 6
7 #include "src/assembler-inl.h" 7 #include "src/assembler-inl.h"
8 #include "src/assert-scope.h" 8 #include "src/assert-scope.h"
9 #include "src/compiler/wasm-compiler.h" 9 #include "src/compiler/wasm-compiler.h"
10 #include "src/debug/debug-scopes.h" 10 #include "src/debug/debug-scopes.h"
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 FunctionSig* sig = module()->functions[func_index].sig; 171 FunctionSig* sig = module()->functions[func_index].sig;
172 DCHECK_GE(kMaxInt, sig->parameter_count()); 172 DCHECK_GE(kMaxInt, sig->parameter_count());
173 int num_params = static_cast<int>(sig->parameter_count()); 173 int num_params = static_cast<int>(sig->parameter_count());
174 ScopedVector<WasmVal> wasm_args(num_params); 174 ScopedVector<WasmVal> wasm_args(num_params);
175 uint8_t* arg_buf_ptr = arg_buffer; 175 uint8_t* arg_buf_ptr = arg_buffer;
176 for (int i = 0; i < num_params; ++i) { 176 for (int i = 0; i < num_params; ++i) {
177 uint32_t param_size = 1 << ElementSizeLog2Of(sig->GetParam(i)); 177 uint32_t param_size = 1 << ElementSizeLog2Of(sig->GetParam(i));
178 #define CASE_ARG_TYPE(type, ctype) \ 178 #define CASE_ARG_TYPE(type, ctype) \
179 case type: \ 179 case type: \
180 DCHECK_EQ(param_size, sizeof(ctype)); \ 180 DCHECK_EQ(param_size, sizeof(ctype)); \
181 wasm_args[i] = WasmVal(ReadUnalignedValue<ctype>(arg_buf_ptr)); \ 181 wasm_args[i] = WasmVal(*reinterpret_cast<ctype*>(arg_buf_ptr)); \
182 break; 182 break;
183 switch (sig->GetParam(i)) { 183 switch (sig->GetParam(i)) {
184 CASE_ARG_TYPE(kWasmI32, uint32_t) 184 CASE_ARG_TYPE(kWasmI32, uint32_t)
185 CASE_ARG_TYPE(kWasmI64, uint64_t) 185 CASE_ARG_TYPE(kWasmI64, uint64_t)
186 CASE_ARG_TYPE(kWasmF32, float) 186 CASE_ARG_TYPE(kWasmF32, float)
187 CASE_ARG_TYPE(kWasmF64, double) 187 CASE_ARG_TYPE(kWasmF64, double)
188 #undef CASE_ARG_TYPE 188 #undef CASE_ARG_TYPE
189 default: 189 default:
190 UNREACHABLE(); 190 UNREACHABLE();
191 } 191 }
192 arg_buf_ptr += param_size; 192 arg_buf_ptr += RoundUpToMultipleOfPowOf2(param_size, 8);
193 } 193 }
194 194
195 uint32_t activation_id = StartActivation(frame_pointer); 195 uint32_t activation_id = StartActivation(frame_pointer);
196 196
197 WasmInterpreter::Thread* thread = interpreter_.GetThread(0); 197 WasmInterpreter::Thread* thread = interpreter_.GetThread(0);
198 thread->InitFrame(&module()->functions[func_index], wasm_args.start()); 198 thread->InitFrame(&module()->functions[func_index], wasm_args.start());
199 bool finished = false; 199 bool finished = false;
200 while (!finished) { 200 while (!finished) {
201 // TODO(clemensh): Add occasional StackChecks. 201 // TODO(clemensh): Add occasional StackChecks.
202 WasmInterpreter::State state = ContinueExecution(thread); 202 WasmInterpreter::State state = ContinueExecution(thread);
(...skipping 30 matching lines...) Expand all
233 233
234 // Copy back the return value 234 // Copy back the return value
235 DCHECK_GE(kV8MaxWasmFunctionReturns, sig->return_count()); 235 DCHECK_GE(kV8MaxWasmFunctionReturns, sig->return_count());
236 // TODO(wasm): Handle multi-value returns. 236 // TODO(wasm): Handle multi-value returns.
237 DCHECK_EQ(1, kV8MaxWasmFunctionReturns); 237 DCHECK_EQ(1, kV8MaxWasmFunctionReturns);
238 if (sig->return_count()) { 238 if (sig->return_count()) {
239 WasmVal ret_val = thread->GetReturnValue(0); 239 WasmVal ret_val = thread->GetReturnValue(0);
240 #define CASE_RET_TYPE(type, ctype) \ 240 #define CASE_RET_TYPE(type, ctype) \
241 case type: \ 241 case type: \
242 DCHECK_EQ(1 << ElementSizeLog2Of(sig->GetReturn(0)), sizeof(ctype)); \ 242 DCHECK_EQ(1 << ElementSizeLog2Of(sig->GetReturn(0)), sizeof(ctype)); \
243 WriteUnalignedValue<ctype>(arg_buffer, ret_val.to<ctype>()); \ 243 *reinterpret_cast<ctype*>(arg_buffer) = ret_val.to<ctype>(); \
244 break; 244 break;
245 switch (sig->GetReturn(0)) { 245 switch (sig->GetReturn(0)) {
246 CASE_RET_TYPE(kWasmI32, uint32_t) 246 CASE_RET_TYPE(kWasmI32, uint32_t)
247 CASE_RET_TYPE(kWasmI64, uint64_t) 247 CASE_RET_TYPE(kWasmI64, uint64_t)
248 CASE_RET_TYPE(kWasmF32, float) 248 CASE_RET_TYPE(kWasmF32, float)
249 CASE_RET_TYPE(kWasmF64, double) 249 CASE_RET_TYPE(kWasmF64, double)
250 #undef CASE_RET_TYPE 250 #undef CASE_RET_TYPE
251 default: 251 default:
252 UNREACHABLE(); 252 UNREACHABLE();
253 } 253 }
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 } 692 }
693 693
694 // static 694 // static
695 Handle<JSArray> WasmDebugInfo::GetScopeDetails(Handle<WasmDebugInfo> debug_info, 695 Handle<JSArray> WasmDebugInfo::GetScopeDetails(Handle<WasmDebugInfo> debug_info,
696 Address frame_pointer, 696 Address frame_pointer,
697 int frame_index) { 697 int frame_index) {
698 InterpreterHandle* interp_handle = GetInterpreterHandle(*debug_info); 698 InterpreterHandle* interp_handle = GetInterpreterHandle(*debug_info);
699 Handle<WasmInstanceObject> instance(debug_info->wasm_instance()); 699 Handle<WasmInstanceObject> instance(debug_info->wasm_instance());
700 return interp_handle->GetScopeDetails(frame_pointer, frame_index, instance); 700 return interp_handle->GetScopeDetails(frame_pointer, frame_index, instance);
701 } 701 }
OLDNEW
« src/utils.h ('K') | « src/utils.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698