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

Side by Side Diff: src/wasm/ast-decoder.cc

Issue 2307733002: [wasm] Fix wasm decoder tracing for prefix opcodes. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 4 years, 3 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
« no previous file with comments | « no previous file | src/wasm/wasm-opcodes.h » ('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/signature.h" 5 #include "src/signature.h"
6 6
7 #include "src/bit-vector.h" 7 #include "src/bit-vector.h"
8 #include "src/flags.h" 8 #include "src/flags.h"
9 #include "src/handles.h" 9 #include "src/handles.h"
10 #include "src/zone-containers.h" 10 #include "src/zone-containers.h"
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 DecodeFunctionBody(); 502 DecodeFunctionBody();
503 503
504 if (failed()) return TraceFailed(); 504 if (failed()) return TraceFailed();
505 505
506 if (!control_.empty()) { 506 if (!control_.empty()) {
507 error(pc_, control_.back().pc, "unterminated control structure"); 507 error(pc_, control_.back().pc, "unterminated control structure");
508 return TraceFailed(); 508 return TraceFailed();
509 } 509 }
510 510
511 if (ssa_env_->go()) { 511 if (ssa_env_->go()) {
512 TRACE(" @%-6d #xx:%-20s|", startrel(pc_), "ImplicitReturn"); 512 TRACE(" @%-8d #xx:%-20s|", startrel(pc_), "ImplicitReturn");
513 DoReturn(); 513 DoReturn();
514 if (failed()) return TraceFailed(); 514 if (failed()) return TraceFailed();
515 TRACE("\n"); 515 TRACE("\n");
516 } 516 }
517 517
518 if (FLAG_trace_wasm_decode_time) { 518 if (FLAG_trace_wasm_decode_time) {
519 double ms = decode_timer.Elapsed().InMillisecondsF(); 519 double ms = decode_timer.Elapsed().InMillisecondsF();
520 PrintF("wasm-decode ok (%0.3f ms)\n\n", ms); 520 PrintF("wasm-decode ok (%0.3f ms)\n\n", ms);
521 } else { 521 } else {
522 TRACE("wasm-decode ok\n\n"); 522 TRACE("wasm-decode ok\n\n");
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 TRACE("wasm-decode %p...%p (module+%d, %d bytes) %s\n", 700 TRACE("wasm-decode %p...%p (module+%d, %d bytes) %s\n",
701 reinterpret_cast<const void*>(start_), 701 reinterpret_cast<const void*>(start_),
702 reinterpret_cast<const void*>(limit_), baserel(pc_), 702 reinterpret_cast<const void*>(limit_), baserel(pc_),
703 static_cast<int>(limit_ - start_), builder_ ? "graph building" : ""); 703 static_cast<int>(limit_ - start_), builder_ ? "graph building" : "");
704 704
705 if (pc_ >= limit_) return; // Nothing to do. 705 if (pc_ >= limit_) return; // Nothing to do.
706 706
707 while (true) { // decoding loop. 707 while (true) { // decoding loop.
708 unsigned len = 1; 708 unsigned len = 1;
709 WasmOpcode opcode = static_cast<WasmOpcode>(*pc_); 709 WasmOpcode opcode = static_cast<WasmOpcode>(*pc_);
710 TRACE(" @%-6d #%02x:%-20s|", startrel(pc_), opcode, 710 if (!WasmOpcodes::IsPrefixOpcode(opcode)) {
711 WasmOpcodes::ShortOpcodeName(opcode)); 711 TRACE(" @%-8d #%02x:%-20s|", startrel(pc_), opcode,
712 WasmOpcodes::ShortOpcodeName(opcode));
713 }
712 714
713 FunctionSig* sig = WasmOpcodes::Signature(opcode); 715 FunctionSig* sig = WasmOpcodes::Signature(opcode);
714 if (sig) { 716 if (sig) {
715 // Fast case of a simple operator. 717 // Fast case of a simple operator.
716 TFNode* node; 718 TFNode* node;
717 switch (sig->parameter_count()) { 719 switch (sig->parameter_count()) {
718 case 1: { 720 case 1: {
719 Value val = Pop(0, sig->GetParam(0)); 721 Value val = Pop(0, sig->GetParam(0));
720 node = BUILD(Unop, opcode, val.node, position()); 722 node = BUILD(Unop, opcode, val.node, position());
721 break; 723 break;
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 Push(GetReturnType(operand.sig), call); 1266 Push(GetReturnType(operand.sig), call);
1265 } 1267 }
1266 len = 1 + operand.length; 1268 len = 1 + operand.length;
1267 break; 1269 break;
1268 } 1270 }
1269 case kSimdPrefix: { 1271 case kSimdPrefix: {
1270 CHECK_PROTOTYPE_OPCODE(wasm_simd_prototype); 1272 CHECK_PROTOTYPE_OPCODE(wasm_simd_prototype);
1271 len++; 1273 len++;
1272 byte simd_index = *(pc_ + 1); 1274 byte simd_index = *(pc_ + 1);
1273 opcode = static_cast<WasmOpcode>(opcode << 8 | simd_index); 1275 opcode = static_cast<WasmOpcode>(opcode << 8 | simd_index);
1276 TRACE(" @%-4d #%02x #%02x:%-20s|", startrel(pc_), kSimdPrefix,
1277 simd_index, WasmOpcodes::ShortOpcodeName(opcode));
1274 DecodeSimdOpcode(opcode); 1278 DecodeSimdOpcode(opcode);
1275 break; 1279 break;
1276 } 1280 }
1277 default: 1281 default:
1278 error("Invalid opcode"); 1282 error("Invalid opcode");
1279 return; 1283 return;
1280 } 1284 }
1281 } // end complex bytecode 1285 } // end complex bytecode
1282 1286
1283 #if DEBUG 1287 #if DEBUG
1284 if (FLAG_trace_wasm_decoder) { 1288 if (FLAG_trace_wasm_decoder) {
1285 for (size_t i = 0; i < stack_.size(); ++i) { 1289 for (size_t i = 0; i < stack_.size(); ++i) {
1286 Value& val = stack_[i]; 1290 Value& val = stack_[i];
1287 WasmOpcode opcode = static_cast<WasmOpcode>(*val.pc); 1291 WasmOpcode opcode = static_cast<WasmOpcode>(*val.pc);
1292 if (WasmOpcodes::IsPrefixOpcode(opcode)) {
1293 opcode = static_cast<WasmOpcode>(opcode << 8 | *(val.pc + 1));
1294 }
1288 PrintF(" %c@%d:%s", WasmOpcodes::ShortNameOf(val.type), 1295 PrintF(" %c@%d:%s", WasmOpcodes::ShortNameOf(val.type),
1289 static_cast<int>(val.pc - start_), 1296 static_cast<int>(val.pc - start_),
1290 WasmOpcodes::ShortOpcodeName(opcode)); 1297 WasmOpcodes::ShortOpcodeName(opcode));
1291 switch (opcode) { 1298 switch (opcode) {
1292 case kExprI32Const: { 1299 case kExprI32Const: {
1293 ImmI32Operand operand(this, val.pc); 1300 ImmI32Operand operand(this, val.pc);
1294 PrintF("[%d]", operand.value); 1301 PrintF("[%d]", operand.value);
1295 break; 1302 break;
1296 } 1303 }
1297 case kExprGetLocal: { 1304 case kExprGetLocal: {
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after
2064 BitVector* AnalyzeLoopAssignmentForTesting(Zone* zone, size_t num_locals, 2071 BitVector* AnalyzeLoopAssignmentForTesting(Zone* zone, size_t num_locals,
2065 const byte* start, const byte* end) { 2072 const byte* start, const byte* end) {
2066 FunctionBody body = {nullptr, nullptr, nullptr, start, end}; 2073 FunctionBody body = {nullptr, nullptr, nullptr, start, end};
2067 WasmFullDecoder decoder(zone, nullptr, body); 2074 WasmFullDecoder decoder(zone, nullptr, body);
2068 return decoder.AnalyzeLoopAssignmentForTesting(start, num_locals); 2075 return decoder.AnalyzeLoopAssignmentForTesting(start, num_locals);
2069 } 2076 }
2070 2077
2071 } // namespace wasm 2078 } // namespace wasm
2072 } // namespace internal 2079 } // namespace internal
2073 } // namespace v8 2080 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/wasm/wasm-opcodes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698