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

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

Issue 2594993002: [wasm] Rename wasm::LocalType to wasm::ValueType and kAst* to kWasm* (Closed)
Patch Set: Fix inspector tests Created 3 years, 12 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 | « src/compiler/wasm-compiler.h ('k') | src/compiler/wasm-linkage.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 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 } 244 }
245 245
246 Node* GetTrapValue(wasm::FunctionSig* sig) { 246 Node* GetTrapValue(wasm::FunctionSig* sig) {
247 if (sig->return_count() > 0) { 247 if (sig->return_count() > 0) {
248 return GetTrapValue(sig->GetReturn()); 248 return GetTrapValue(sig->GetReturn());
249 } else { 249 } else {
250 return jsgraph()->Int32Constant(0xdeadbeef); 250 return jsgraph()->Int32Constant(0xdeadbeef);
251 } 251 }
252 } 252 }
253 253
254 Node* GetTrapValue(wasm::LocalType type) { 254 Node* GetTrapValue(wasm::ValueType type) {
255 switch (type) { 255 switch (type) {
256 case wasm::kAstI32: 256 case wasm::kWasmI32:
257 return jsgraph()->Int32Constant(0xdeadbeef); 257 return jsgraph()->Int32Constant(0xdeadbeef);
258 case wasm::kAstI64: 258 case wasm::kWasmI64:
259 return jsgraph()->Int64Constant(0xdeadbeefdeadbeef); 259 return jsgraph()->Int64Constant(0xdeadbeefdeadbeef);
260 case wasm::kAstF32: 260 case wasm::kWasmF32:
261 return jsgraph()->Float32Constant(bit_cast<float>(0xdeadbeef)); 261 return jsgraph()->Float32Constant(bit_cast<float>(0xdeadbeef));
262 case wasm::kAstF64: 262 case wasm::kWasmF64:
263 return jsgraph()->Float64Constant(bit_cast<double>(0xdeadbeefdeadbeef)); 263 return jsgraph()->Float64Constant(bit_cast<double>(0xdeadbeefdeadbeef));
264 break; 264 break;
265 case wasm::kAstS128: 265 case wasm::kWasmS128:
266 return builder_->CreateS128Value(0xdeadbeef); 266 return builder_->CreateS128Value(0xdeadbeef);
267 break; 267 break;
268 default: 268 default:
269 UNREACHABLE(); 269 UNREACHABLE();
270 return nullptr; 270 return nullptr;
271 } 271 }
272 } 272 }
273 273
274 private: 274 private:
275 WasmGraphBuilder* builder_; 275 WasmGraphBuilder* builder_;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 : zone_(zone), 346 : zone_(zone),
347 jsgraph_(jsgraph), 347 jsgraph_(jsgraph),
348 function_tables_(zone), 348 function_tables_(zone),
349 function_table_sizes_(zone), 349 function_table_sizes_(zone),
350 cur_buffer_(def_buffer_), 350 cur_buffer_(def_buffer_),
351 cur_bufsize_(kDefaultBufferSize), 351 cur_bufsize_(kDefaultBufferSize),
352 trap_(new (zone) WasmTrapHelper(this)), 352 trap_(new (zone) WasmTrapHelper(this)),
353 sig_(sig), 353 sig_(sig),
354 source_position_table_(source_position_table) { 354 source_position_table_(source_position_table) {
355 for (size_t i = 0; i < sig->parameter_count(); i++) { 355 for (size_t i = 0; i < sig->parameter_count(); i++) {
356 if (sig->GetParam(i) == wasm::kAstS128) has_simd_ = true; 356 if (sig->GetParam(i) == wasm::kWasmS128) has_simd_ = true;
357 } 357 }
358 for (size_t i = 0; i < sig->return_count(); i++) { 358 for (size_t i = 0; i < sig->return_count(); i++) {
359 if (sig->GetReturn(i) == wasm::kAstS128) has_simd_ = true; 359 if (sig->GetReturn(i) == wasm::kWasmS128) has_simd_ = true;
360 } 360 }
361 DCHECK_NOT_NULL(jsgraph_); 361 DCHECK_NOT_NULL(jsgraph_);
362 } 362 }
363 363
364 Node* WasmGraphBuilder::Error() { return jsgraph()->Dead(); } 364 Node* WasmGraphBuilder::Error() { return jsgraph()->Dead(); }
365 365
366 Node* WasmGraphBuilder::Start(unsigned params) { 366 Node* WasmGraphBuilder::Start(unsigned params) {
367 Node* start = graph()->NewNode(jsgraph()->common()->Start(params)); 367 Node* start = graph()->NewNode(jsgraph()->common()->Start(params));
368 graph()->SetStart(start); 368 graph()->SetStart(start);
369 return start; 369 return start;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 int new_size = phi->InputCount(); 420 int new_size = phi->InputCount();
421 phi->InsertInput(jsgraph()->zone(), phi->InputCount() - 1, from); 421 phi->InsertInput(jsgraph()->zone(), phi->InputCount() - 1, from);
422 NodeProperties::ChangeOp( 422 NodeProperties::ChangeOp(
423 phi, jsgraph()->common()->ResizeMergeOrPhi(phi->op(), new_size)); 423 phi, jsgraph()->common()->ResizeMergeOrPhi(phi->op(), new_size));
424 } 424 }
425 425
426 Node* WasmGraphBuilder::Merge(unsigned count, Node** controls) { 426 Node* WasmGraphBuilder::Merge(unsigned count, Node** controls) {
427 return graph()->NewNode(jsgraph()->common()->Merge(count), count, controls); 427 return graph()->NewNode(jsgraph()->common()->Merge(count), count, controls);
428 } 428 }
429 429
430 Node* WasmGraphBuilder::Phi(wasm::LocalType type, unsigned count, Node** vals, 430 Node* WasmGraphBuilder::Phi(wasm::ValueType type, unsigned count, Node** vals,
431 Node* control) { 431 Node* control) {
432 DCHECK(IrOpcode::IsMergeOpcode(control->opcode())); 432 DCHECK(IrOpcode::IsMergeOpcode(control->opcode()));
433 Node** buf = Realloc(vals, count, count + 1); 433 Node** buf = Realloc(vals, count, count + 1);
434 buf[count] = control; 434 buf[count] = control;
435 return graph()->NewNode(jsgraph()->common()->Phi(type, count), count + 1, 435 return graph()->NewNode(jsgraph()->common()->Phi(type, count), count + 1,
436 buf); 436 buf);
437 } 437 }
438 438
439 Node* WasmGraphBuilder::EffectPhi(unsigned count, Node** effects, 439 Node* WasmGraphBuilder::EffectPhi(unsigned count, Node** effects,
440 Node* control) { 440 Node* control) {
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 return m->Word32ReverseBytes().IsSupported(); 1161 return m->Word32ReverseBytes().IsSupported();
1162 case 8: 1162 case 8:
1163 return m->Word64ReverseBytes().IsSupported(); 1163 return m->Word64ReverseBytes().IsSupported();
1164 default: 1164 default:
1165 break; 1165 break;
1166 } 1166 }
1167 return false; 1167 return false;
1168 } 1168 }
1169 1169
1170 Node* WasmGraphBuilder::BuildChangeEndianness(Node* node, MachineType memtype, 1170 Node* WasmGraphBuilder::BuildChangeEndianness(Node* node, MachineType memtype,
1171 wasm::LocalType wasmtype) { 1171 wasm::ValueType wasmtype) {
1172 Node* result; 1172 Node* result;
1173 Node* value = node; 1173 Node* value = node;
1174 MachineOperatorBuilder* m = jsgraph()->machine(); 1174 MachineOperatorBuilder* m = jsgraph()->machine();
1175 int valueSizeInBytes = 1 << ElementSizeLog2Of(memtype.representation()); 1175 int valueSizeInBytes = 1 << ElementSizeLog2Of(memtype.representation());
1176 int valueSizeInBits = 8 * valueSizeInBytes; 1176 int valueSizeInBits = 8 * valueSizeInBytes;
1177 bool isFloat = false; 1177 bool isFloat = false;
1178 1178
1179 switch (memtype.representation()) { 1179 switch (memtype.representation()) {
1180 case MachineRepresentation::kFloat64: 1180 case MachineRepresentation::kFloat64:
1181 value = graph()->NewNode(m->BitcastFloat64ToInt64(), node); 1181 value = graph()->NewNode(m->BitcastFloat64ToInt64(), node);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 } 1277 }
1278 1278
1279 // We need to sign extend the value 1279 // We need to sign extend the value
1280 if (memtype.IsSigned()) { 1280 if (memtype.IsSigned()) {
1281 DCHECK(!isFloat); 1281 DCHECK(!isFloat);
1282 if (valueSizeInBits < 32) { 1282 if (valueSizeInBits < 32) {
1283 Node* shiftBitCount; 1283 Node* shiftBitCount;
1284 // Perform sign extension using following trick 1284 // Perform sign extension using following trick
1285 // result = (x << machine_width - type_width) >> (machine_width - 1285 // result = (x << machine_width - type_width) >> (machine_width -
1286 // type_width) 1286 // type_width)
1287 if (wasmtype == wasm::kAstI64) { 1287 if (wasmtype == wasm::kWasmI64) {
1288 shiftBitCount = jsgraph()->Int32Constant(64 - valueSizeInBits); 1288 shiftBitCount = jsgraph()->Int32Constant(64 - valueSizeInBits);
1289 result = graph()->NewNode( 1289 result = graph()->NewNode(
1290 m->Word64Sar(), 1290 m->Word64Sar(),
1291 graph()->NewNode(m->Word64Shl(), 1291 graph()->NewNode(m->Word64Shl(),
1292 graph()->NewNode(m->ChangeInt32ToInt64(), result), 1292 graph()->NewNode(m->ChangeInt32ToInt64(), result),
1293 shiftBitCount), 1293 shiftBitCount),
1294 shiftBitCount); 1294 shiftBitCount);
1295 } else if (wasmtype == wasm::kAstI32) { 1295 } else if (wasmtype == wasm::kWasmI32) {
1296 shiftBitCount = jsgraph()->Int32Constant(32 - valueSizeInBits); 1296 shiftBitCount = jsgraph()->Int32Constant(32 - valueSizeInBits);
1297 result = graph()->NewNode( 1297 result = graph()->NewNode(
1298 m->Word32Sar(), 1298 m->Word32Sar(),
1299 graph()->NewNode(m->Word32Shl(), result, shiftBitCount), 1299 graph()->NewNode(m->Word32Shl(), result, shiftBitCount),
1300 shiftBitCount); 1300 shiftBitCount);
1301 } 1301 }
1302 } 1302 }
1303 } 1303 }
1304 1304
1305 return result; 1305 return result;
(...skipping 1156 matching lines...) Expand 10 before | Expand all | Expand 10 after
2462 2462
2463 // Allocate the box for the {value}. 2463 // Allocate the box for the {value}.
2464 vbox = BuildAllocateHeapNumberWithValue(value, if_box); 2464 vbox = BuildAllocateHeapNumberWithValue(value, if_box);
2465 2465
2466 Node* control = graph()->NewNode(common->Merge(2), if_smi, if_box); 2466 Node* control = graph()->NewNode(common->Merge(2), if_smi, if_box);
2467 value = graph()->NewNode(common->Phi(MachineRepresentation::kTagged, 2), vsmi, 2467 value = graph()->NewNode(common->Phi(MachineRepresentation::kTagged, 2), vsmi,
2468 vbox, control); 2468 vbox, control);
2469 return value; 2469 return value;
2470 } 2470 }
2471 2471
2472 Node* WasmGraphBuilder::ToJS(Node* node, wasm::LocalType type) { 2472 Node* WasmGraphBuilder::ToJS(Node* node, wasm::ValueType type) {
2473 switch (type) { 2473 switch (type) {
2474 case wasm::kAstI32: 2474 case wasm::kWasmI32:
2475 return BuildChangeInt32ToTagged(node); 2475 return BuildChangeInt32ToTagged(node);
2476 case wasm::kAstS128: 2476 case wasm::kWasmS128:
2477 case wasm::kAstI64: 2477 case wasm::kWasmI64:
2478 // Throw a TypeError. The native context is good enough here because we 2478 // Throw a TypeError. The native context is good enough here because we
2479 // only throw a TypeError. 2479 // only throw a TypeError.
2480 return BuildCallToRuntime(Runtime::kWasmThrowTypeError, jsgraph(), 2480 return BuildCallToRuntime(Runtime::kWasmThrowTypeError, jsgraph(),
2481 jsgraph()->isolate()->native_context(), nullptr, 2481 jsgraph()->isolate()->native_context(), nullptr,
2482 0, effect_, *control_); 2482 0, effect_, *control_);
2483 case wasm::kAstF32: 2483 case wasm::kWasmF32:
2484 node = graph()->NewNode(jsgraph()->machine()->ChangeFloat32ToFloat64(), 2484 node = graph()->NewNode(jsgraph()->machine()->ChangeFloat32ToFloat64(),
2485 node); 2485 node);
2486 return BuildChangeFloat64ToTagged(node); 2486 return BuildChangeFloat64ToTagged(node);
2487 case wasm::kAstF64: 2487 case wasm::kWasmF64:
2488 return BuildChangeFloat64ToTagged(node); 2488 return BuildChangeFloat64ToTagged(node);
2489 case wasm::kAstStmt: 2489 case wasm::kWasmStmt:
2490 return jsgraph()->UndefinedConstant(); 2490 return jsgraph()->UndefinedConstant();
2491 default: 2491 default:
2492 UNREACHABLE(); 2492 UNREACHABLE();
2493 return nullptr; 2493 return nullptr;
2494 } 2494 }
2495 } 2495 }
2496 2496
2497 Node* WasmGraphBuilder::BuildJavaScriptToNumber(Node* node, Node* context) { 2497 Node* WasmGraphBuilder::BuildJavaScriptToNumber(Node* node, Node* context) {
2498 Callable callable = CodeFactory::ToNumber(jsgraph()->isolate()); 2498 Callable callable = CodeFactory::ToNumber(jsgraph()->isolate());
2499 CallDescriptor* desc = Linkage::GetStubCallDescriptor( 2499 CallDescriptor* desc = Linkage::GetStubCallDescriptor(
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
2616 Node* vfrom_smi = BuildChangeSmiToFloat64(value); 2616 Node* vfrom_smi = BuildChangeSmiToFloat64(value);
2617 2617
2618 Node* merge = graph()->NewNode(common->Merge(2), if_not_smi, if_smi); 2618 Node* merge = graph()->NewNode(common->Merge(2), if_not_smi, if_smi);
2619 Node* phi = graph()->NewNode(common->Phi(MachineRepresentation::kFloat64, 2), 2619 Node* phi = graph()->NewNode(common->Phi(MachineRepresentation::kFloat64, 2),
2620 vnot_smi, vfrom_smi, merge); 2620 vnot_smi, vfrom_smi, merge);
2621 2621
2622 return phi; 2622 return phi;
2623 } 2623 }
2624 2624
2625 Node* WasmGraphBuilder::FromJS(Node* node, Node* context, 2625 Node* WasmGraphBuilder::FromJS(Node* node, Node* context,
2626 wasm::LocalType type) { 2626 wasm::ValueType type) {
2627 DCHECK_NE(wasm::kAstStmt, type); 2627 DCHECK_NE(wasm::kWasmStmt, type);
2628 2628
2629 // Do a JavaScript ToNumber. 2629 // Do a JavaScript ToNumber.
2630 Node* num = BuildJavaScriptToNumber(node, context); 2630 Node* num = BuildJavaScriptToNumber(node, context);
2631 2631
2632 // Change representation. 2632 // Change representation.
2633 SimplifiedOperatorBuilder simplified(jsgraph()->zone()); 2633 SimplifiedOperatorBuilder simplified(jsgraph()->zone());
2634 num = BuildChangeTaggedToFloat64(num); 2634 num = BuildChangeTaggedToFloat64(num);
2635 2635
2636 switch (type) { 2636 switch (type) {
2637 case wasm::kAstI32: { 2637 case wasm::kWasmI32: {
2638 num = graph()->NewNode(jsgraph()->machine()->TruncateFloat64ToWord32(), 2638 num = graph()->NewNode(jsgraph()->machine()->TruncateFloat64ToWord32(),
2639 num); 2639 num);
2640 break; 2640 break;
2641 } 2641 }
2642 case wasm::kAstS128: 2642 case wasm::kWasmS128:
2643 case wasm::kAstI64: 2643 case wasm::kWasmI64:
2644 // Throw a TypeError. The native context is good enough here because we 2644 // Throw a TypeError. The native context is good enough here because we
2645 // only throw a TypeError. 2645 // only throw a TypeError.
2646 return BuildCallToRuntime(Runtime::kWasmThrowTypeError, jsgraph(), 2646 return BuildCallToRuntime(Runtime::kWasmThrowTypeError, jsgraph(),
2647 jsgraph()->isolate()->native_context(), nullptr, 2647 jsgraph()->isolate()->native_context(), nullptr,
2648 0, effect_, *control_); 2648 0, effect_, *control_);
2649 case wasm::kAstF32: 2649 case wasm::kWasmF32:
2650 num = graph()->NewNode(jsgraph()->machine()->TruncateFloat64ToFloat32(), 2650 num = graph()->NewNode(jsgraph()->machine()->TruncateFloat64ToFloat32(),
2651 num); 2651 num);
2652 break; 2652 break;
2653 case wasm::kAstF64: 2653 case wasm::kWasmF64:
2654 break; 2654 break;
2655 default: 2655 default:
2656 UNREACHABLE(); 2656 UNREACHABLE();
2657 return nullptr; 2657 return nullptr;
2658 } 2658 }
2659 return num; 2659 return num;
2660 } 2660 }
2661 2661
2662 Node* WasmGraphBuilder::BuildChangeInt32ToSmi(Node* value) { 2662 Node* WasmGraphBuilder::BuildChangeInt32ToSmi(Node* value) {
2663 if (jsgraph()->machine()->Is64()) { 2663 if (jsgraph()->machine()->Is64()) {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
2763 graph()->start()); 2763 graph()->start());
2764 2764
2765 int pos = 0; 2765 int pos = 0;
2766 args[pos++] = HeapConstant(wasm_code); 2766 args[pos++] = HeapConstant(wasm_code);
2767 2767
2768 // Convert JS parameters to WASM numbers. 2768 // Convert JS parameters to WASM numbers.
2769 for (int i = 0; i < wasm_count; ++i) { 2769 for (int i = 0; i < wasm_count; ++i) {
2770 Node* param = Param(i + 1); 2770 Node* param = Param(i + 1);
2771 Node* wasm_param = FromJS(param, context, sig->GetParam(i)); 2771 Node* wasm_param = FromJS(param, context, sig->GetParam(i));
2772 args[pos++] = wasm_param; 2772 args[pos++] = wasm_param;
2773 if (jsgraph()->machine()->Is32() && sig->GetParam(i) == wasm::kAstI64) { 2773 if (jsgraph()->machine()->Is32() && sig->GetParam(i) == wasm::kWasmI64) {
2774 // We make up the high word with SAR to get the proper sign extension. 2774 // We make up the high word with SAR to get the proper sign extension.
2775 args[pos++] = graph()->NewNode(jsgraph()->machine()->Word32Sar(), 2775 args[pos++] = graph()->NewNode(jsgraph()->machine()->Word32Sar(),
2776 wasm_param, jsgraph()->Int32Constant(31)); 2776 wasm_param, jsgraph()->Int32Constant(31));
2777 } 2777 }
2778 } 2778 }
2779 2779
2780 args[pos++] = *effect_; 2780 args[pos++] = *effect_;
2781 args[pos++] = *control_; 2781 args[pos++] = *control_;
2782 2782
2783 // Call the WASM code. 2783 // Call the WASM code.
2784 CallDescriptor* desc = 2784 CallDescriptor* desc =
2785 wasm::ModuleEnv::GetWasmCallDescriptor(jsgraph()->zone(), sig); 2785 wasm::ModuleEnv::GetWasmCallDescriptor(jsgraph()->zone(), sig);
2786 if (jsgraph()->machine()->Is32()) { 2786 if (jsgraph()->machine()->Is32()) {
2787 desc = wasm::ModuleEnv::GetI32WasmCallDescriptor(jsgraph()->zone(), desc); 2787 desc = wasm::ModuleEnv::GetI32WasmCallDescriptor(jsgraph()->zone(), desc);
2788 } 2788 }
2789 Node* call = graph()->NewNode(jsgraph()->common()->Call(desc), count, args); 2789 Node* call = graph()->NewNode(jsgraph()->common()->Call(desc), count, args);
2790 *effect_ = call; 2790 *effect_ = call;
2791 Node* retval = call; 2791 Node* retval = call;
2792 if (jsgraph()->machine()->Is32() && sig->return_count() > 0 && 2792 if (jsgraph()->machine()->Is32() && sig->return_count() > 0 &&
2793 sig->GetReturn(0) == wasm::kAstI64) { 2793 sig->GetReturn(0) == wasm::kWasmI64) {
2794 // The return values comes as two values, we pick the low word. 2794 // The return values comes as two values, we pick the low word.
2795 retval = graph()->NewNode(jsgraph()->common()->Projection(0), retval, 2795 retval = graph()->NewNode(jsgraph()->common()->Projection(0), retval,
2796 graph()->start()); 2796 graph()->start());
2797 } 2797 }
2798 Node* jsval = ToJS( 2798 Node* jsval = ToJS(
2799 retval, sig->return_count() == 0 ? wasm::kAstStmt : sig->GetReturn()); 2799 retval, sig->return_count() == 0 ? wasm::kWasmStmt : sig->GetReturn());
2800 Return(jsval); 2800 Return(jsval);
2801 } 2801 }
2802 2802
2803 int WasmGraphBuilder::AddParameterNodes(Node** args, int pos, int param_count, 2803 int WasmGraphBuilder::AddParameterNodes(Node** args, int pos, int param_count,
2804 wasm::FunctionSig* sig) { 2804 wasm::FunctionSig* sig) {
2805 // Convert WASM numbers to JS values. 2805 // Convert WASM numbers to JS values.
2806 int param_index = 0; 2806 int param_index = 0;
2807 for (int i = 0; i < param_count; ++i) { 2807 for (int i = 0; i < param_count; ++i) {
2808 Node* param = Param(param_index++); 2808 Node* param = Param(param_index++);
2809 args[pos++] = ToJS(param, sig->GetParam(i)); 2809 args[pos++] = ToJS(param, sig->GetParam(i));
2810 if (jsgraph()->machine()->Is32() && sig->GetParam(i) == wasm::kAstI64) { 2810 if (jsgraph()->machine()->Is32() && sig->GetParam(i) == wasm::kWasmI64) {
2811 // On 32 bit platforms we have to skip the high word of int64 2811 // On 32 bit platforms we have to skip the high word of int64
2812 // parameters. 2812 // parameters.
2813 param_index++; 2813 param_index++;
2814 } 2814 }
2815 } 2815 }
2816 return pos; 2816 return pos;
2817 } 2817 }
2818 2818
2819 void WasmGraphBuilder::BuildWasmToJSWrapper(Handle<JSReceiver> target, 2819 void WasmGraphBuilder::BuildWasmToJSWrapper(Handle<JSReceiver> target,
2820 wasm::FunctionSig* sig) { 2820 wasm::FunctionSig* sig) {
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
3054 } 3054 }
3055 } 3055 }
3056 3056
3057 Node* cond = graph()->NewNode(jsgraph()->machine()->Uint32LessThan(), index, 3057 Node* cond = graph()->NewNode(jsgraph()->machine()->Uint32LessThan(), index,
3058 jsgraph()->RelocatableInt32Constant( 3058 jsgraph()->RelocatableInt32Constant(
3059 static_cast<uint32_t>(effective_size), 3059 static_cast<uint32_t>(effective_size),
3060 RelocInfo::WASM_MEMORY_SIZE_REFERENCE)); 3060 RelocInfo::WASM_MEMORY_SIZE_REFERENCE));
3061 trap_->AddTrapIfFalse(wasm::kTrapMemOutOfBounds, cond, position); 3061 trap_->AddTrapIfFalse(wasm::kTrapMemOutOfBounds, cond, position);
3062 } 3062 }
3063 3063
3064 3064 Node* WasmGraphBuilder::LoadMem(wasm::ValueType type, MachineType memtype,
3065 Node* WasmGraphBuilder::LoadMem(wasm::LocalType type, MachineType memtype,
3066 Node* index, uint32_t offset, 3065 Node* index, uint32_t offset,
3067 uint32_t alignment, 3066 uint32_t alignment,
3068 wasm::WasmCodePosition position) { 3067 wasm::WasmCodePosition position) {
3069 Node* load; 3068 Node* load;
3070 3069
3071 // WASM semantics throw on OOB. Introduce explicit bounds check. 3070 // WASM semantics throw on OOB. Introduce explicit bounds check.
3072 if (!FLAG_wasm_trap_handler || !kTrapHandlerSupported) { 3071 if (!FLAG_wasm_trap_handler || !kTrapHandlerSupported) {
3073 BoundsCheckMem(memtype, index, offset, position); 3072 BoundsCheckMem(memtype, index, offset, position);
3074 } 3073 }
3075 bool aligned = static_cast<int>(alignment) >= 3074 bool aligned = static_cast<int>(alignment) >=
(...skipping 18 matching lines...) Expand all
3094 load = graph()->NewNode(jsgraph()->machine()->UnalignedLoad(memtype), 3093 load = graph()->NewNode(jsgraph()->machine()->UnalignedLoad(memtype),
3095 MemBuffer(offset), index, *effect_, *control_); 3094 MemBuffer(offset), index, *effect_, *control_);
3096 } 3095 }
3097 3096
3098 *effect_ = load; 3097 *effect_ = load;
3099 3098
3100 #if defined(V8_TARGET_BIG_ENDIAN) 3099 #if defined(V8_TARGET_BIG_ENDIAN)
3101 load = BuildChangeEndianness(load, memtype, type); 3100 load = BuildChangeEndianness(load, memtype, type);
3102 #endif 3101 #endif
3103 3102
3104 if (type == wasm::kAstI64 && 3103 if (type == wasm::kWasmI64 &&
3105 ElementSizeLog2Of(memtype.representation()) < 3) { 3104 ElementSizeLog2Of(memtype.representation()) < 3) {
3106 // TODO(titzer): TF zeroes the upper bits of 64-bit loads for subword sizes. 3105 // TODO(titzer): TF zeroes the upper bits of 64-bit loads for subword sizes.
3107 if (memtype.IsSigned()) { 3106 if (memtype.IsSigned()) {
3108 // sign extend 3107 // sign extend
3109 load = graph()->NewNode(jsgraph()->machine()->ChangeInt32ToInt64(), load); 3108 load = graph()->NewNode(jsgraph()->machine()->ChangeInt32ToInt64(), load);
3110 } else { 3109 } else {
3111 // zero extend 3110 // zero extend
3112 load = 3111 load =
3113 graph()->NewNode(jsgraph()->machine()->ChangeUint32ToUint64(), load); 3112 graph()->NewNode(jsgraph()->machine()->ChangeUint32ToUint64(), load);
3114 } 3113 }
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after
3690 Smi::FromInt(instruction.instr_offset)); 3689 Smi::FromInt(instruction.instr_offset));
3691 fn_protected->set(Code::kTrapDataSize * i + Code::kTrapLandingOffset, 3690 fn_protected->set(Code::kTrapDataSize * i + Code::kTrapLandingOffset,
3692 Smi::FromInt(instruction.landing_offset)); 3691 Smi::FromInt(instruction.landing_offset));
3693 } 3692 }
3694 return fn_protected; 3693 return fn_protected;
3695 } 3694 }
3696 3695
3697 } // namespace compiler 3696 } // namespace compiler
3698 } // namespace internal 3697 } // namespace internal
3699 } // namespace v8 3698 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/wasm-compiler.h ('k') | src/compiler/wasm-linkage.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698