%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
#include "src/ast/ast.h" #include "src/builtins/builtins-array-gen.h" #include "src/builtins/builtins-bigint-gen.h" #include "src/builtins/builtins-collections-gen.h" #include "src/builtins/builtins-constructor-gen.h" #include "src/builtins/builtins-data-view-gen.h" #include "src/builtins/builtins-iterator-gen.h" #include "src/builtins/builtins-promise-gen.h" #include "src/builtins/builtins-promise.h" #include "src/builtins/builtins-proxy-gen.h" #include "src/builtins/builtins-regexp-gen.h" #include "src/builtins/builtins-string-gen.h" #include "src/builtins/builtins-typed-array-gen.h" #include "src/builtins/builtins-utils-gen.h" #include "src/builtins/builtins-wasm-gen.h" #include "src/builtins/builtins.h" #include "src/codegen/code-factory.h" #include "src/debug/debug-wasm-objects.h" #include "src/heap/factory-inl.h" #include "src/ic/binary-op-assembler.h" #include "src/ic/handler-configuration-inl.h" #include "src/objects/arguments.h" #include "src/objects/bigint.h" #include "src/objects/elements-kind.h" #include "src/objects/free-space.h" #include "src/objects/js-break-iterator.h" #include "src/objects/js-collator.h" #include "src/objects/js-date-time-format.h" #include "src/objects/js-display-names.h" #include "src/objects/js-function.h" #include "src/objects/js-generator.h" #include "src/objects/js-list-format.h" #include "src/objects/js-locale.h" #include "src/objects/js-number-format.h" #include "src/objects/js-objects.h" #include "src/objects/js-plural-rules.h" #include "src/objects/js-promise.h" #include "src/objects/js-regexp-string-iterator.h" #include "src/objects/js-relative-time-format.h" #include "src/objects/js-segment-iterator.h" #include "src/objects/js-segmenter.h" #include "src/objects/js-segments.h" #include "src/objects/js-weak-refs.h" #include "src/objects/objects.h" #include "src/objects/ordered-hash-table.h" #include "src/objects/property-array.h" #include "src/objects/property-descriptor-object.h" #include "src/objects/source-text-module.h" #include "src/objects/stack-frame-info.h" #include "src/objects/swiss-hash-table-helpers.h" #include "src/objects/swiss-name-dictionary.h" #include "src/objects/synthetic-module.h" #include "src/objects/template-objects.h" #include "src/objects/torque-defined-classes.h" #include "src/torque/runtime-support.h" // Required Builtins: #include "torque-generated/src/builtins/wasm-tq-csa.h" #include "torque-generated/src/builtins/array-join-tq-csa.h" #include "torque-generated/src/builtins/base-tq-csa.h" #include "torque-generated/src/builtins/cast-tq-csa.h" #include "torque-generated/src/builtins/convert-tq-csa.h" #include "torque-generated/src/builtins/promise-abstract-operations-tq-csa.h" #include "torque-generated/src/builtins/torque-internal-tq-csa.h" #include "torque-generated/src/objects/fixed-array-tq-csa.h" #include "torque-generated/src/objects/js-array-tq-csa.h" #include "torque-generated/src/objects/js-objects-tq-csa.h" #include "torque-generated/test/torque/test-torque-tq-csa.h" #include "torque-generated/src/builtins/wasm-tq-csa.h" namespace v8 { namespace internal { TNode<NativeContext> LoadContextFromFrame_0(compiler::CodeAssemblerState* state_) { compiler::CodeAssembler ca_(state_); compiler::CodeAssembler::SourcePositionScope pos_scope(&ca_); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<WasmInstanceObject> tmp0; TNode<NativeContext> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); tmp1 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp0}); ca_.Goto(&block2); } ca_.Bind(&block2); return TNode<NativeContext>{tmp1}; } TF_BUILTIN(WasmInt32ToHeapNumber, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Int32T> parameter0 = UncheckedParameter<Int32T>(Descriptor::kVal); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Float64T> tmp0; TNode<HeapNumber> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = Convert_float64_int32_0(state_, TNode<Int32T>{parameter0}); tmp1 = CodeStubAssembler(state_).AllocateHeapNumberWithValue(TNode<Float64T>{tmp0}); CodeStubAssembler(state_).Return(tmp1); } } TF_BUILTIN(WasmTaggedNonSmiToInt32, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Context> parameter0 = UncheckedParameter<Context>(Descriptor::kContext); USE(parameter0); TNode<HeapObject> parameter1 = UncheckedParameter<HeapObject>(Descriptor::kVal); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Int32T> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).ChangeTaggedNonSmiToInt32(TNode<Context>{parameter0}, TNode<HeapObject>{parameter1}); CodeStubAssembler(state_).Return(tmp0); } } TF_BUILTIN(WasmTaggedToFloat64, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Context> parameter0 = UncheckedParameter<Context>(Descriptor::kContext); USE(parameter0); TNode<Object> parameter1 = UncheckedParameter<Object>(Descriptor::kVal); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Float64T> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).ChangeTaggedToFloat64(TNode<Context>{parameter0}, TNode<Object>{parameter1}); CodeStubAssembler(state_).Return(tmp0); } } TF_BUILTIN(WasmMemoryGrow, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Int32T> parameter0 = UncheckedParameter<Int32T>(Descriptor::kNumPages); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<IntPtrT> tmp0; TNode<BoolT> tmp1; TNode<BoolT> tmp2; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).ChangeInt32ToIntPtr(TNode<Int32T>{parameter0}); tmp1 = CodeStubAssembler(state_).IsValidPositiveSmi(TNode<IntPtrT>{tmp0}); tmp2 = CodeStubAssembler(state_).Word32BinaryNot(TNode<BoolT>{tmp1}); ca_.Branch(tmp2, &block1, std::vector<compiler::Node*>{}, &block2, std::vector<compiler::Node*>{}); } TNode<Int32T> tmp3; if (block1.is_used()) { ca_.Bind(&block1); tmp3 = CodeStubAssembler(state_).Int32Constant(-1); CodeStubAssembler(state_).Return(tmp3); } TNode<WasmInstanceObject> tmp4; TNode<NativeContext> tmp5; TNode<Smi> tmp6; TNode<Smi> tmp7; TNode<Int32T> tmp8; if (block2.is_used()) { ca_.Bind(&block2); tmp4 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); tmp5 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp4}); tmp6 = CodeStubAssembler(state_).SmiFromInt32(TNode<Int32T>{parameter0}); tmp7 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kWasmMemoryGrow, tmp5, tmp4, tmp6)); tmp8 = CodeStubAssembler(state_).SmiToInt32(TNode<Smi>{tmp7}); CodeStubAssembler(state_).Return(tmp8); } } TF_BUILTIN(WasmTableInit, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Uint32T> parameter0 = UncheckedParameter<Uint32T>(Descriptor::kDstRaw); USE(parameter0); TNode<Uint32T> parameter1 = UncheckedParameter<Uint32T>(Descriptor::kSrcRaw); USE(parameter1); TNode<Uint32T> parameter2 = UncheckedParameter<Uint32T>(Descriptor::kSizeRaw); USE(parameter2); TNode<Smi> parameter3 = UncheckedParameter<Smi>(Descriptor::kTableIndex); USE(parameter3); TNode<Smi> parameter4 = UncheckedParameter<Smi>(Descriptor::kSegmentIndex); USE(parameter4); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kDeferred); ca_.Goto(&block0); TNode<WasmInstanceObject> tmp0; TNode<Smi> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); compiler::CodeAssemblerLabel label2(&ca_); tmp1 = Convert_PositiveSmi_uint32_0(state_, TNode<Uint32T>{parameter0}, &label2); ca_.Goto(&block3); if (label2.is_used()) { ca_.Bind(&label2); ca_.Goto(&block4); } } if (block4.is_used()) { ca_.Bind(&block4); ca_.Goto(&block2); } TNode<Smi> tmp3; if (block3.is_used()) { ca_.Bind(&block3); compiler::CodeAssemblerLabel label4(&ca_); tmp3 = Convert_PositiveSmi_uint32_0(state_, TNode<Uint32T>{parameter1}, &label4); ca_.Goto(&block5); if (label4.is_used()) { ca_.Bind(&label4); ca_.Goto(&block6); } } if (block6.is_used()) { ca_.Bind(&block6); ca_.Goto(&block2); } TNode<Smi> tmp5; if (block5.is_used()) { ca_.Bind(&block5); compiler::CodeAssemblerLabel label6(&ca_); tmp5 = Convert_PositiveSmi_uint32_0(state_, TNode<Uint32T>{parameter2}, &label6); ca_.Goto(&block7); if (label6.is_used()) { ca_.Bind(&label6); ca_.Goto(&block8); } } if (block8.is_used()) { ca_.Bind(&block8); ca_.Goto(&block2); } TNode<NativeContext> tmp7; if (block7.is_used()) { ca_.Bind(&block7); tmp7 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp0}); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmTableInit, tmp7, tmp0, parameter3, parameter4, tmp1, tmp3, tmp5); } if (block2.is_used()) { ca_.Bind(&block2); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kThrowWasmTrapTableOutOfBounds, TNode<Object>()); } } TF_BUILTIN(WasmTableCopy, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Uint32T> parameter0 = UncheckedParameter<Uint32T>(Descriptor::kDstRaw); USE(parameter0); TNode<Uint32T> parameter1 = UncheckedParameter<Uint32T>(Descriptor::kSrcRaw); USE(parameter1); TNode<Uint32T> parameter2 = UncheckedParameter<Uint32T>(Descriptor::kSizeRaw); USE(parameter2); TNode<Smi> parameter3 = UncheckedParameter<Smi>(Descriptor::kDstTable); USE(parameter3); TNode<Smi> parameter4 = UncheckedParameter<Smi>(Descriptor::kSrcTable); USE(parameter4); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kDeferred); ca_.Goto(&block0); TNode<WasmInstanceObject> tmp0; TNode<Smi> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); compiler::CodeAssemblerLabel label2(&ca_); tmp1 = Convert_PositiveSmi_uint32_0(state_, TNode<Uint32T>{parameter0}, &label2); ca_.Goto(&block3); if (label2.is_used()) { ca_.Bind(&label2); ca_.Goto(&block4); } } if (block4.is_used()) { ca_.Bind(&block4); ca_.Goto(&block2); } TNode<Smi> tmp3; if (block3.is_used()) { ca_.Bind(&block3); compiler::CodeAssemblerLabel label4(&ca_); tmp3 = Convert_PositiveSmi_uint32_0(state_, TNode<Uint32T>{parameter1}, &label4); ca_.Goto(&block5); if (label4.is_used()) { ca_.Bind(&label4); ca_.Goto(&block6); } } if (block6.is_used()) { ca_.Bind(&block6); ca_.Goto(&block2); } TNode<Smi> tmp5; if (block5.is_used()) { ca_.Bind(&block5); compiler::CodeAssemblerLabel label6(&ca_); tmp5 = Convert_PositiveSmi_uint32_0(state_, TNode<Uint32T>{parameter2}, &label6); ca_.Goto(&block7); if (label6.is_used()) { ca_.Bind(&label6); ca_.Goto(&block8); } } if (block8.is_used()) { ca_.Bind(&block8); ca_.Goto(&block2); } TNode<NativeContext> tmp7; if (block7.is_used()) { ca_.Bind(&block7); tmp7 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp0}); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmTableCopy, tmp7, tmp0, parameter3, parameter4, tmp1, tmp3, tmp5); } if (block2.is_used()) { ca_.Bind(&block2); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kThrowWasmTrapTableOutOfBounds, TNode<Object>()); } } TF_BUILTIN(WasmTableFill, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Smi> parameter0 = UncheckedParameter<Smi>(Descriptor::kTable); USE(parameter0); TNode<Uint32T> parameter1 = UncheckedParameter<Uint32T>(Descriptor::kStartRaw); USE(parameter1); TNode<Uint32T> parameter2 = UncheckedParameter<Uint32T>(Descriptor::kCountRaw); USE(parameter2); TNode<Object> parameter3 = UncheckedParameter<Object>(Descriptor::kValue); USE(parameter3); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kDeferred); ca_.Goto(&block0); TNode<WasmInstanceObject> tmp0; TNode<Smi> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); compiler::CodeAssemblerLabel label2(&ca_); tmp1 = Convert_PositiveSmi_uint32_0(state_, TNode<Uint32T>{parameter1}, &label2); ca_.Goto(&block3); if (label2.is_used()) { ca_.Bind(&label2); ca_.Goto(&block4); } } if (block4.is_used()) { ca_.Bind(&block4); ca_.Goto(&block2); } TNode<Smi> tmp3; if (block3.is_used()) { ca_.Bind(&block3); compiler::CodeAssemblerLabel label4(&ca_); tmp3 = Convert_PositiveSmi_uint32_0(state_, TNode<Uint32T>{parameter2}, &label4); ca_.Goto(&block5); if (label4.is_used()) { ca_.Bind(&label4); ca_.Goto(&block6); } } if (block6.is_used()) { ca_.Bind(&block6); ca_.Goto(&block2); } TNode<NativeContext> tmp5; if (block5.is_used()) { ca_.Bind(&block5); tmp5 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp0}); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmTableFill, tmp5, tmp0, parameter0, tmp1, parameter3, tmp3); } if (block2.is_used()) { ca_.Bind(&block2); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kThrowWasmTrapTableOutOfBounds, TNode<Object>()); } } TF_BUILTIN(WasmTableGrow, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Smi> parameter0 = UncheckedParameter<Smi>(Descriptor::kTable); USE(parameter0); TNode<Uint32T> parameter1 = UncheckedParameter<Uint32T>(Descriptor::kDeltaRaw); USE(parameter1); TNode<Object> parameter2 = UncheckedParameter<Object>(Descriptor::kValue); USE(parameter2); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<WasmInstanceObject> tmp0; TNode<Smi> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); compiler::CodeAssemblerLabel label2(&ca_); tmp1 = Convert_PositiveSmi_uint32_0(state_, TNode<Uint32T>{parameter1}, &label2); ca_.Goto(&block3); if (label2.is_used()) { ca_.Bind(&label2); ca_.Goto(&block4); } } TNode<Smi> tmp3; if (block4.is_used()) { ca_.Bind(&block4); tmp3 = FromConstexpr_Smi_constexpr_int31_0(state_, -1); CodeStubAssembler(state_).Return(tmp3); } TNode<NativeContext> tmp4; if (block3.is_used()) { ca_.Bind(&block3); tmp4 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp0}); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmTableGrow, tmp4, tmp0, parameter0, parameter2, tmp1); } } TF_BUILTIN(WasmTableGet, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<IntPtrT> parameter0 = UncheckedParameter<IntPtrT>(Descriptor::kTableIndex); USE(parameter0); TNode<Int32T> parameter1 = UncheckedParameter<Int32T>(Descriptor::kIndex); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block10(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block11(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block12(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block16(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block15(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block17(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block18(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block14(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kDeferred); ca_.Goto(&block0); TNode<WasmInstanceObject> tmp0; TNode<IntPtrT> tmp1; TNode<BoolT> tmp2; TNode<BoolT> tmp3; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); tmp1 = CodeStubAssembler(state_).ChangeInt32ToIntPtr(TNode<Int32T>{parameter1}); tmp2 = CodeStubAssembler(state_).IsValidPositiveSmi(TNode<IntPtrT>{tmp1}); tmp3 = CodeStubAssembler(state_).Word32BinaryNot(TNode<BoolT>{tmp2}); ca_.Branch(tmp3, &block9, std::vector<compiler::Node*>{}, &block10, std::vector<compiler::Node*>{}); } if (block9.is_used()) { ca_.Bind(&block9); ca_.Goto(&block2); } TNode<FixedArray> tmp4; TNode<Object> tmp5; TNode<WasmTableObject> tmp6; TNode<IntPtrT> tmp7; TNode<Smi> tmp8; TNode<IntPtrT> tmp9; TNode<BoolT> tmp10; if (block10.is_used()) { ca_.Bind(&block10); tmp4 = WasmBuiltinsAssembler(state_).LoadTablesFromInstance(TNode<WasmInstanceObject>{tmp0}); tmp5 = CodeStubAssembler(state_).LoadFixedArrayElement(TNode<FixedArray>{tmp4}, TNode<IntPtrT>{parameter0}); tmp6 = TORQUE_CAST(TNode<Object>{tmp5}); tmp7 = FromConstexpr_intptr_constexpr_int31_0(state_, 40); tmp8 = CodeStubAssembler(state_).LoadReference<Smi>(CodeStubAssembler::Reference{tmp6, tmp7}); tmp9 = Convert_intptr_Smi_0(state_, TNode<Smi>{tmp8}); tmp10 = CodeStubAssembler(state_).IntPtrGreaterThanOrEqual(TNode<IntPtrT>{tmp1}, TNode<IntPtrT>{tmp9}); ca_.Branch(tmp10, &block11, std::vector<compiler::Node*>{}, &block12, std::vector<compiler::Node*>{}); } if (block11.is_used()) { ca_.Bind(&block11); ca_.Goto(&block2); } TNode<IntPtrT> tmp11; TNode<FixedArray> tmp12; TNode<Object> tmp13; TNode<HeapObject> tmp14; if (block12.is_used()) { ca_.Bind(&block12); tmp11 = FromConstexpr_intptr_constexpr_int31_0(state_, 32); tmp12 = CodeStubAssembler(state_).LoadReference<FixedArray>(CodeStubAssembler::Reference{tmp6, tmp11}); tmp13 = CodeStubAssembler(state_).LoadFixedArrayElement(TNode<FixedArray>{tmp12}, TNode<IntPtrT>{tmp1}); compiler::CodeAssemblerLabel label15(&ca_); tmp14 = CodeStubAssembler(state_).TaggedToHeapObject(TNode<Object>{tmp13}, &label15); ca_.Goto(&block15); if (label15.is_used()) { ca_.Bind(&label15); ca_.Goto(&block16); } } if (block16.is_used()) { ca_.Bind(&block16); ca_.Goto(&block14); } TNode<IntPtrT> tmp16; TNode<Map> tmp17; TNode<BoolT> tmp18; if (block15.is_used()) { ca_.Bind(&block15); tmp16 = FromConstexpr_intptr_constexpr_int31_0(state_, 0); tmp17 = CodeStubAssembler(state_).LoadReference<Map>(CodeStubAssembler::Reference{tmp14, tmp16}); tmp18 = CodeStubAssembler(state_).IsTuple2Map(TNode<Map>{tmp17}); ca_.Branch(tmp18, &block17, std::vector<compiler::Node*>{}, &block18, std::vector<compiler::Node*>{}); } TNode<NativeContext> tmp19; TNode<Smi> tmp20; TNode<Smi> tmp21; if (block17.is_used()) { ca_.Bind(&block17); tmp19 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp0}); tmp20 = CodeStubAssembler(state_).SmiFromIntPtr(TNode<IntPtrT>{parameter0}); tmp21 = CodeStubAssembler(state_).SmiFromIntPtr(TNode<IntPtrT>{tmp1}); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmFunctionTableGet, tmp19, tmp0, tmp20, tmp21); } if (block18.is_used()) { ca_.Bind(&block18); ca_.Goto(&block14); } if (block14.is_used()) { ca_.Bind(&block14); CodeStubAssembler(state_).Return(tmp13); } if (block2.is_used()) { ca_.Bind(&block2); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kThrowWasmTrapTableOutOfBounds, TNode<Object>()); } } TF_BUILTIN(WasmTableSet, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<IntPtrT> parameter0 = UncheckedParameter<IntPtrT>(Descriptor::kTableIndex); USE(parameter0); TNode<Int32T> parameter1 = UncheckedParameter<Int32T>(Descriptor::kIndex); USE(parameter1); TNode<Object> parameter2 = UncheckedParameter<Object>(Descriptor::kValue); USE(parameter2); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block10(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block13(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block14(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<BoolT> block15(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block11(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block12(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block16(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block17(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kDeferred); ca_.Goto(&block0); TNode<WasmInstanceObject> tmp0; TNode<IntPtrT> tmp1; TNode<BoolT> tmp2; TNode<BoolT> tmp3; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); tmp1 = CodeStubAssembler(state_).ChangeInt32ToIntPtr(TNode<Int32T>{parameter1}); tmp2 = CodeStubAssembler(state_).IsValidPositiveSmi(TNode<IntPtrT>{tmp1}); tmp3 = CodeStubAssembler(state_).Word32BinaryNot(TNode<BoolT>{tmp2}); ca_.Branch(tmp3, &block9, std::vector<compiler::Node*>{}, &block10, std::vector<compiler::Node*>{}); } if (block9.is_used()) { ca_.Bind(&block9); ca_.Goto(&block2); } TNode<FixedArray> tmp4; TNode<Object> tmp5; TNode<WasmTableObject> tmp6; TNode<IntPtrT> tmp7; TNode<Smi> tmp8; TNode<Smi> tmp9; TNode<BoolT> tmp10; if (block10.is_used()) { ca_.Bind(&block10); tmp4 = WasmBuiltinsAssembler(state_).LoadTablesFromInstance(TNode<WasmInstanceObject>{tmp0}); tmp5 = CodeStubAssembler(state_).LoadFixedArrayElement(TNode<FixedArray>{tmp4}, TNode<IntPtrT>{parameter0}); tmp6 = TORQUE_CAST(TNode<Object>{tmp5}); tmp7 = FromConstexpr_intptr_constexpr_int31_0(state_, 64); tmp8 = CodeStubAssembler(state_).LoadReference<Smi>(CodeStubAssembler::Reference{tmp6, tmp7}); tmp9 = CodeStubAssembler(state_).SmiConstant(wasm::kWasmExternRef.raw_bit_field()); tmp10 = CodeStubAssembler(state_).SmiNotEqual(TNode<Smi>{tmp8}, TNode<Smi>{tmp9}); ca_.Branch(tmp10, &block13, std::vector<compiler::Node*>{}, &block14, std::vector<compiler::Node*>{}); } TNode<Smi> tmp11; TNode<BoolT> tmp12; if (block13.is_used()) { ca_.Bind(&block13); tmp11 = CodeStubAssembler(state_).SmiConstant(wasm::kWasmExternNonNullableRef.raw_bit_field()); tmp12 = CodeStubAssembler(state_).SmiNotEqual(TNode<Smi>{tmp8}, TNode<Smi>{tmp11}); ca_.Goto(&block15, tmp12); } TNode<BoolT> tmp13; if (block14.is_used()) { ca_.Bind(&block14); tmp13 = FromConstexpr_bool_constexpr_bool_0(state_, false); ca_.Goto(&block15, tmp13); } TNode<BoolT> phi_bb15_9; if (block15.is_used()) { ca_.Bind(&block15, &phi_bb15_9); ca_.Branch(phi_bb15_9, &block11, std::vector<compiler::Node*>{}, &block12, std::vector<compiler::Node*>{}); } TNode<NativeContext> tmp14; TNode<Smi> tmp15; TNode<Smi> tmp16; if (block11.is_used()) { ca_.Bind(&block11); tmp14 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp0}); tmp15 = CodeStubAssembler(state_).SmiFromIntPtr(TNode<IntPtrT>{parameter0}); tmp16 = CodeStubAssembler(state_).SmiFromIntPtr(TNode<IntPtrT>{tmp1}); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmFunctionTableSet, tmp14, tmp0, tmp15, tmp16, parameter2); } TNode<IntPtrT> tmp17; TNode<Smi> tmp18; TNode<IntPtrT> tmp19; TNode<BoolT> tmp20; if (block12.is_used()) { ca_.Bind(&block12); tmp17 = FromConstexpr_intptr_constexpr_int31_0(state_, 40); tmp18 = CodeStubAssembler(state_).LoadReference<Smi>(CodeStubAssembler::Reference{tmp6, tmp17}); tmp19 = Convert_intptr_Smi_0(state_, TNode<Smi>{tmp18}); tmp20 = CodeStubAssembler(state_).IntPtrGreaterThanOrEqual(TNode<IntPtrT>{tmp1}, TNode<IntPtrT>{tmp19}); ca_.Branch(tmp20, &block16, std::vector<compiler::Node*>{}, &block17, std::vector<compiler::Node*>{}); } if (block16.is_used()) { ca_.Bind(&block16); ca_.Goto(&block2); } TNode<IntPtrT> tmp21; TNode<FixedArray> tmp22; TNode<Oddball> tmp23; if (block17.is_used()) { ca_.Bind(&block17); tmp21 = FromConstexpr_intptr_constexpr_int31_0(state_, 32); tmp22 = CodeStubAssembler(state_).LoadReference<FixedArray>(CodeStubAssembler::Reference{tmp6, tmp21}); CodeStubAssembler(state_).StoreFixedArrayElement(TNode<FixedArray>{tmp22}, TNode<IntPtrT>{tmp1}, TNode<Object>{parameter2}); tmp23 = Undefined_0(state_); CodeStubAssembler(state_).Return(tmp23); } if (block2.is_used()) { ca_.Bind(&block2); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kThrowWasmTrapTableOutOfBounds, TNode<Object>()); } } TF_BUILTIN(WasmRefFunc, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Uint32T> parameter0 = UncheckedParameter<Uint32T>(Descriptor::kIndex); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kDeferred); ca_.Goto(&block0); TNode<WasmInstanceObject> tmp0; TNode<FixedArray> tmp1; TNode<Oddball> tmp2; TNode<BoolT> tmp3; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); tmp1 = WasmBuiltinsAssembler(state_).LoadExternalFunctionsFromInstance(TNode<WasmInstanceObject>{tmp0}); tmp2 = Undefined_0(state_); tmp3 = CodeStubAssembler(state_).TaggedEqual(TNode<HeapObject>{tmp1}, TNode<HeapObject>{tmp2}); ca_.Branch(tmp3, &block3, std::vector<compiler::Node*>{}, &block4, std::vector<compiler::Node*>{}); } if (block3.is_used()) { ca_.Bind(&block3); ca_.Goto(&block2); } TNode<UintPtrT> tmp4; TNode<IntPtrT> tmp5; TNode<Object> tmp6; TNode<Oddball> tmp7; TNode<BoolT> tmp8; if (block4.is_used()) { ca_.Bind(&block4); tmp4 = CodeStubAssembler(state_).ChangeUint32ToWord(TNode<Uint32T>{parameter0}); tmp5 = CodeStubAssembler(state_).Signed(TNode<UintPtrT>{tmp4}); tmp6 = CodeStubAssembler(state_).LoadFixedArrayElement(TNode<FixedArray>{tmp1}, TNode<IntPtrT>{tmp5}); tmp7 = Undefined_0(state_); tmp8 = CodeStubAssembler(state_).TaggedEqual(TNode<Object>{tmp6}, TNode<HeapObject>{tmp7}); ca_.Branch(tmp8, &block5, std::vector<compiler::Node*>{}, &block6, std::vector<compiler::Node*>{}); } if (block5.is_used()) { ca_.Bind(&block5); ca_.Goto(&block2); } if (block6.is_used()) { ca_.Bind(&block6); CodeStubAssembler(state_).Return(tmp6); } TNode<NativeContext> tmp9; TNode<Smi> tmp10; if (block2.is_used()) { ca_.Bind(&block2); tmp9 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp0}); tmp10 = CodeStubAssembler(state_).SmiFromUint32(TNode<Uint32T>{parameter0}); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmRefFunc, tmp9, tmp0, tmp10); } } TF_BUILTIN(WasmAllocateFixedArray, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<IntPtrT> parameter0 = UncheckedParameter<IntPtrT>(Descriptor::kSize); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<IntPtrT> tmp0; TNode<BoolT> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = FromConstexpr_intptr_constexpr_int31_0(state_, 0); tmp1 = CodeStubAssembler(state_).WordEqual(TNode<IntPtrT>{parameter0}, TNode<IntPtrT>{tmp0}); ca_.Branch(tmp1, &block1, std::vector<compiler::Node*>{}, &block2, std::vector<compiler::Node*>{}); } TNode<FixedArray> tmp2; if (block1.is_used()) { ca_.Bind(&block1); tmp2 = kEmptyFixedArray_0(state_); CodeStubAssembler(state_).Return(tmp2); } TNode<FixedArrayBase> tmp3; TNode<FixedArray> tmp4; if (block2.is_used()) { ca_.Bind(&block2); tmp3 = CodeStubAssembler(state_).AllocateFixedArray(ElementsKind::PACKED_ELEMENTS, TNode<IntPtrT>{parameter0}, CodeStubAssembler::AllocationFlag::kNone); tmp4 = TORQUE_CAST(TNode<Object>{tmp3}); CodeStubAssembler(state_).Return(tmp4); } } TF_BUILTIN(WasmThrow, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Object> parameter0 = UncheckedParameter<Object>(Descriptor::kTag); USE(parameter0); TNode<FixedArray> parameter1 = UncheckedParameter<FixedArray>(Descriptor::kValues); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<NativeContext> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = LoadContextFromFrame_0(state_); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmThrow, tmp0, parameter0, parameter1); } } TF_BUILTIN(WasmRethrow, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Object> parameter0 = UncheckedParameter<Object>(Descriptor::kException); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Oddball> tmp0; TNode<BoolT> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = Null_0(state_); tmp1 = CodeStubAssembler(state_).TaggedEqual(TNode<Object>{parameter0}, TNode<HeapObject>{tmp0}); ca_.Branch(tmp1, &block1, std::vector<compiler::Node*>{}, &block2, std::vector<compiler::Node*>{}); } if (block1.is_used()) { ca_.Bind(&block1); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kThrowWasmTrapRethrowNull, TNode<Object>()); } TNode<NativeContext> tmp2; if (block2.is_used()) { ca_.Bind(&block2); tmp2 = LoadContextFromFrame_0(state_); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmReThrow, tmp2, parameter0); } } TF_BUILTIN(WasmTriggerTierUp, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<WasmInstanceObject> tmp0; TNode<NativeContext> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); tmp1 = LoadContextFromFrame_0(state_); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmTriggerTierUp, tmp1, tmp0); } } TF_BUILTIN(WasmStackGuard, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<NativeContext> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = LoadContextFromFrame_0(state_); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmStackGuard, tmp0); } } TF_BUILTIN(WasmStackOverflow, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<NativeContext> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = LoadContextFromFrame_0(state_); CodeStubAssembler(state_).TailCallRuntime(Runtime::kThrowWasmStackOverflow, tmp0); } } TF_BUILTIN(WasmTraceMemory, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Smi> parameter0 = UncheckedParameter<Smi>(Descriptor::kInfo); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<NativeContext> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = LoadContextFromFrame_0(state_); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmTraceMemory, tmp0, parameter0); } } TF_BUILTIN(WasmTraceEnter, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<NativeContext> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = LoadContextFromFrame_0(state_); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmTraceEnter, tmp0); } } TF_BUILTIN(WasmTraceExit, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Smi> parameter0 = UncheckedParameter<Smi>(Descriptor::kInfo); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<NativeContext> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = LoadContextFromFrame_0(state_); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmTraceExit, tmp0, parameter0); } } TF_BUILTIN(WasmAllocateJSArray, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Context> parameter0 = UncheckedParameter<Context>(Descriptor::kContext); USE(parameter0); TNode<Smi> parameter1 = UncheckedParameter<Smi>(Descriptor::kSize); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Map> tmp0; TNode<JSArray> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = GetFastPackedElementsJSArrayMap_0(state_, TNode<Context>{parameter0}); tmp1 = CodeStubAssembler(state_).AllocateJSArray(ElementsKind::PACKED_ELEMENTS, TNode<Map>{tmp0}, TNode<Smi>{parameter1}, TNode<Smi>{parameter1}); CodeStubAssembler(state_).Return(tmp1); } } TF_BUILTIN(WasmAllocatePair, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Object> parameter0 = UncheckedParameter<Object>(Descriptor::kFirst); USE(parameter0); TNode<Object> parameter1 = UncheckedParameter<Object>(Descriptor::kSecond); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Map> tmp0; TNode<BoolT> tmp1; TNode<IntPtrT> tmp2; TNode<HeapObject> tmp3; TNode<IntPtrT> tmp4; TNode<IntPtrT> tmp5; TNode<IntPtrT> tmp6; TNode<Tuple2> tmp7; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).GetClassMapConstant<Tuple2>(); tmp1 = FromConstexpr_bool_constexpr_bool_0(state_, false); tmp2 = FromConstexpr_intptr_constexpr_int31_0(state_, 24); tmp3 = AllocateFromNew_0(state_, TNode<IntPtrT>{tmp2}, TNode<Map>{tmp0}, TNode<BoolT>{tmp1}); tmp4 = FromConstexpr_intptr_constexpr_int31_0(state_, 0); CodeStubAssembler(state_).StoreReference<Map>(CodeStubAssembler::Reference{tmp3, tmp4}, tmp0); tmp5 = FromConstexpr_intptr_constexpr_int31_0(state_, 8); CodeStubAssembler(state_).StoreReference<Object>(CodeStubAssembler::Reference{tmp3, tmp5}, parameter0); tmp6 = FromConstexpr_intptr_constexpr_int31_0(state_, 16); CodeStubAssembler(state_).StoreReference<Object>(CodeStubAssembler::Reference{tmp3, tmp6}, parameter1); tmp7 = TORQUE_CAST(TNode<HeapObject>{tmp3}); CodeStubAssembler(state_).Return(tmp7); } } TF_BUILTIN(WasmAllocateRtt, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<IntPtrT> parameter0 = UncheckedParameter<IntPtrT>(Descriptor::kTypeIndex); USE(parameter0); TNode<Map> parameter1 = UncheckedParameter<Map>(Descriptor::kParent); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<NativeContext> tmp0; TNode<Smi> tmp1; TNode<Smi> tmp2; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = LoadContextFromFrame_0(state_); tmp1 = CodeStubAssembler(state_).SmiTag(TNode<IntPtrT>{parameter0}); tmp2 = CodeStubAssembler(state_).SmiConstant(WasmRttSubMode::kCanonicalize); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmAllocateRtt, tmp0, tmp1, parameter1, tmp2); } } TF_BUILTIN(WasmAllocateFreshRtt, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<IntPtrT> parameter0 = UncheckedParameter<IntPtrT>(Descriptor::kTypeIndex); USE(parameter0); TNode<Map> parameter1 = UncheckedParameter<Map>(Descriptor::kParent); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<NativeContext> tmp0; TNode<Smi> tmp1; TNode<Smi> tmp2; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = LoadContextFromFrame_0(state_); tmp1 = CodeStubAssembler(state_).SmiTag(TNode<IntPtrT>{parameter0}); tmp2 = CodeStubAssembler(state_).SmiConstant(WasmRttSubMode::kFresh); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmAllocateRtt, tmp0, tmp1, parameter1, tmp2); } } TF_BUILTIN(WasmAllocateStructWithRtt, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Map> parameter0 = UncheckedParameter<Map>(Descriptor::kRtt); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<IntPtrT> tmp0; TNode<Object> tmp1; TNode<WasmTypeInfo> tmp2; TNode<IntPtrT> tmp3; TNode<Smi> tmp4; TNode<IntPtrT> tmp5; TNode<HeapObject> tmp6; TNode<IntPtrT> tmp7; TNode<Object> tmp8; TNode<IntPtrT> tmp9; TNode<WasmStruct> tmp10; TNode<IntPtrT> tmp11; TNode<FixedArray> tmp12; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = FromConstexpr_intptr_constexpr_int31_0(state_, 32); tmp1 = CodeStubAssembler(state_).LoadReference<Object>(CodeStubAssembler::Reference{parameter0, tmp0}); tmp2 = TORQUE_CAST(TNode<Object>{tmp1}); tmp3 = FromConstexpr_intptr_constexpr_int31_0(state_, 32); tmp4 = CodeStubAssembler(state_).LoadReference<Smi>(CodeStubAssembler::Reference{tmp2, tmp3}); tmp5 = CodeStubAssembler(state_).SmiUntag(TNode<Smi>{tmp4}); tmp6 = CodeStubAssembler(state_).Allocate(TNode<IntPtrT>{tmp5}, CodeStubAssembler::AllocationFlag::kAllowLargeObjectAllocation); tmp7 = FromConstexpr_intptr_constexpr_int31_0(state_, 0); std::tie(tmp8, tmp9) = UnsafeConstCast_Map_0(state_, TorqueStructReference_Map_0{TNode<Object>{tmp6}, TNode<IntPtrT>{tmp7}, TorqueStructUnsafe_0{}}).Flatten(); CodeStubAssembler(state_).StoreReference<Map>(CodeStubAssembler::Reference{tmp8, tmp9}, parameter0); tmp10 = TORQUE_CAST(TNode<HeapObject>{tmp6}); tmp11 = FromConstexpr_intptr_constexpr_int31_0(state_, 8); tmp12 = kEmptyFixedArray_0(state_); CodeStubAssembler(state_).StoreReference<Object>(CodeStubAssembler::Reference{tmp10, tmp11}, tmp12); CodeStubAssembler(state_).Return(tmp6); } } TNode<HeapObject> WasmAllocateArray_0(compiler::CodeAssemblerState* state_, TNode<Map> p_rtt, TNode<Uint32T> p_length, TNode<Uint32T> p_elementSize, CodeStubAssembler::InitializationMode p_initializationMode) { compiler::CodeAssembler ca_(state_); compiler::CodeAssembler::SourcePositionScope pos_scope(&ca_); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<IntPtrT> tmp0; TNode<IntPtrT> tmp1; TNode<IntPtrT> tmp2; TNode<IntPtrT> tmp3; TNode<IntPtrT> tmp4; TNode<IntPtrT> tmp5; TNode<HeapObject> tmp6; TNode<IntPtrT> tmp7; TNode<Object> tmp8; TNode<IntPtrT> tmp9; TNode<WasmArray> tmp10; TNode<IntPtrT> tmp11; TNode<FixedArray> tmp12; TNode<WasmArray> tmp13; TNode<IntPtrT> tmp14; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = Convert_intptr_uint32_0(state_, TNode<Uint32T>{p_length}); tmp1 = Convert_intptr_uint32_0(state_, TNode<Uint32T>{p_elementSize}); tmp2 = CodeStubAssembler(state_).IntPtrMul(TNode<IntPtrT>{tmp0}, TNode<IntPtrT>{tmp1}); tmp3 = AlignTagged_0(state_, TNode<IntPtrT>{tmp2}); tmp4 = Convert_intptr_constexpr_int32_0(state_, WasmArray::kHeaderSize); tmp5 = CodeStubAssembler(state_).IntPtrAdd(TNode<IntPtrT>{tmp3}, TNode<IntPtrT>{tmp4}); tmp6 = CodeStubAssembler(state_).AllocateWasmArray(TNode<IntPtrT>{tmp5}, p_initializationMode); tmp7 = FromConstexpr_intptr_constexpr_int31_0(state_, 0); std::tie(tmp8, tmp9) = UnsafeConstCast_Map_0(state_, TorqueStructReference_Map_0{TNode<Object>{tmp6}, TNode<IntPtrT>{tmp7}, TorqueStructUnsafe_0{}}).Flatten(); CodeStubAssembler(state_).StoreReference<Map>(CodeStubAssembler::Reference{tmp8, tmp9}, p_rtt); tmp10 = TORQUE_CAST(TNode<HeapObject>{tmp6}); tmp11 = FromConstexpr_intptr_constexpr_int31_0(state_, 8); tmp12 = kEmptyFixedArray_0(state_); CodeStubAssembler(state_).StoreReference<Object>(CodeStubAssembler::Reference{tmp10, tmp11}, tmp12); tmp13 = TORQUE_CAST(TNode<HeapObject>{tmp6}); tmp14 = FromConstexpr_intptr_constexpr_int31_0(state_, 16); CodeStubAssembler(state_).StoreReference<Uint32T>(CodeStubAssembler::Reference{tmp13, tmp14}, p_length); ca_.Goto(&block2); } ca_.Bind(&block2); return TNode<HeapObject>{tmp6}; } TF_BUILTIN(WasmAllocateArray_Uninitialized, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Map> parameter0 = UncheckedParameter<Map>(Descriptor::kRtt); USE(parameter0); TNode<Uint32T> parameter1 = UncheckedParameter<Uint32T>(Descriptor::kLength); USE(parameter1); TNode<Uint32T> parameter2 = UncheckedParameter<Uint32T>(Descriptor::kElementSize); USE(parameter2); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<HeapObject> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmAllocateArray_0(state_, TNode<Map>{parameter0}, TNode<Uint32T>{parameter1}, TNode<Uint32T>{parameter2}, CodeStubAssembler::InitializationMode::kUninitialized); CodeStubAssembler(state_).Return(tmp0); } } TF_BUILTIN(WasmAllocateArray_InitZero, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Map> parameter0 = UncheckedParameter<Map>(Descriptor::kRtt); USE(parameter0); TNode<Uint32T> parameter1 = UncheckedParameter<Uint32T>(Descriptor::kLength); USE(parameter1); TNode<Uint32T> parameter2 = UncheckedParameter<Uint32T>(Descriptor::kElementSize); USE(parameter2); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<HeapObject> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmAllocateArray_0(state_, TNode<Map>{parameter0}, TNode<Uint32T>{parameter1}, TNode<Uint32T>{parameter2}, CodeStubAssembler::InitializationMode::kInitializeToZero); CodeStubAssembler(state_).Return(tmp0); } } TF_BUILTIN(WasmAllocateArray_InitNull, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Map> parameter0 = UncheckedParameter<Map>(Descriptor::kRtt); USE(parameter0); TNode<Uint32T> parameter1 = UncheckedParameter<Uint32T>(Descriptor::kLength); USE(parameter1); TNode<Uint32T> parameter2 = UncheckedParameter<Uint32T>(Descriptor::kElementSize); USE(parameter2); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<HeapObject> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmAllocateArray_0(state_, TNode<Map>{parameter0}, TNode<Uint32T>{parameter1}, TNode<Uint32T>{parameter2}, CodeStubAssembler::InitializationMode::kInitializeToNull); CodeStubAssembler(state_).Return(tmp0); } } TF_BUILTIN(WasmArrayCopyWithChecks, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Uint32T> parameter0 = UncheckedParameter<Uint32T>(Descriptor::kDstIndex); USE(parameter0); TNode<Uint32T> parameter1 = UncheckedParameter<Uint32T>(Descriptor::kSrcIndex); USE(parameter1); TNode<Uint32T> parameter2 = UncheckedParameter<Uint32T>(Descriptor::kLength); USE(parameter2); TNode<Object> parameter3 = UncheckedParameter<Object>(Descriptor::kDstObject); USE(parameter3); TNode<Object> parameter4 = UncheckedParameter<Object>(Descriptor::kSrcObject); USE(parameter4); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<BoolT> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block10(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block11(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<BoolT> block12(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block13(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block14(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<BoolT> block15(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Oddball> tmp0; TNode<BoolT> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = Null_0(state_); tmp1 = CodeStubAssembler(state_).TaggedEqual(TNode<Object>{parameter3}, TNode<HeapObject>{tmp0}); ca_.Branch(tmp1, &block1, std::vector<compiler::Node*>{}, &block2, std::vector<compiler::Node*>{}); } if (block1.is_used()) { ca_.Bind(&block1); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kThrowWasmTrapNullDereference, TNode<Object>()); } TNode<Oddball> tmp2; TNode<BoolT> tmp3; if (block2.is_used()) { ca_.Bind(&block2); tmp2 = Null_0(state_); tmp3 = CodeStubAssembler(state_).TaggedEqual(TNode<Object>{parameter4}, TNode<HeapObject>{tmp2}); ca_.Branch(tmp3, &block3, std::vector<compiler::Node*>{}, &block4, std::vector<compiler::Node*>{}); } if (block3.is_used()) { ca_.Bind(&block3); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kThrowWasmTrapNullDereference, TNode<Object>()); } TNode<WasmArray> tmp4; TNode<WasmArray> tmp5; TNode<Uint32T> tmp6; TNode<IntPtrT> tmp7; TNode<Uint32T> tmp8; TNode<BoolT> tmp9; if (block4.is_used()) { ca_.Bind(&block4); tmp4 = TORQUE_CAST(TNode<Object>{parameter3}); tmp5 = TORQUE_CAST(TNode<Object>{parameter4}); tmp6 = CodeStubAssembler(state_).Uint32Add(TNode<Uint32T>{parameter0}, TNode<Uint32T>{parameter2}); tmp7 = FromConstexpr_intptr_constexpr_int31_0(state_, 16); tmp8 = CodeStubAssembler(state_).LoadReference<Uint32T>(CodeStubAssembler::Reference{tmp4, tmp7}); tmp9 = CodeStubAssembler(state_).Uint32GreaterThan(TNode<Uint32T>{tmp6}, TNode<Uint32T>{tmp8}); ca_.Branch(tmp9, &block7, std::vector<compiler::Node*>{}, &block8, std::vector<compiler::Node*>{}); } TNode<BoolT> tmp10; if (block7.is_used()) { ca_.Bind(&block7); tmp10 = FromConstexpr_bool_constexpr_bool_0(state_, true); ca_.Goto(&block9, tmp10); } TNode<Uint32T> tmp11; TNode<BoolT> tmp12; if (block8.is_used()) { ca_.Bind(&block8); tmp11 = CodeStubAssembler(state_).Uint32Add(TNode<Uint32T>{parameter0}, TNode<Uint32T>{parameter2}); tmp12 = CodeStubAssembler(state_).Uint32LessThan(TNode<Uint32T>{tmp11}, TNode<Uint32T>{parameter0}); ca_.Goto(&block9, tmp12); } TNode<BoolT> phi_bb9_8; if (block9.is_used()) { ca_.Bind(&block9, &phi_bb9_8); ca_.Branch(phi_bb9_8, &block10, std::vector<compiler::Node*>{}, &block11, std::vector<compiler::Node*>{}); } TNode<BoolT> tmp13; if (block10.is_used()) { ca_.Bind(&block10); tmp13 = FromConstexpr_bool_constexpr_bool_0(state_, true); ca_.Goto(&block12, tmp13); } TNode<Uint32T> tmp14; TNode<IntPtrT> tmp15; TNode<Uint32T> tmp16; TNode<BoolT> tmp17; if (block11.is_used()) { ca_.Bind(&block11); tmp14 = CodeStubAssembler(state_).Uint32Add(TNode<Uint32T>{parameter1}, TNode<Uint32T>{parameter2}); tmp15 = FromConstexpr_intptr_constexpr_int31_0(state_, 16); tmp16 = CodeStubAssembler(state_).LoadReference<Uint32T>(CodeStubAssembler::Reference{tmp5, tmp15}); tmp17 = CodeStubAssembler(state_).Uint32GreaterThan(TNode<Uint32T>{tmp14}, TNode<Uint32T>{tmp16}); ca_.Goto(&block12, tmp17); } TNode<BoolT> phi_bb12_8; if (block12.is_used()) { ca_.Bind(&block12, &phi_bb12_8); ca_.Branch(phi_bb12_8, &block13, std::vector<compiler::Node*>{}, &block14, std::vector<compiler::Node*>{}); } TNode<BoolT> tmp18; if (block13.is_used()) { ca_.Bind(&block13); tmp18 = FromConstexpr_bool_constexpr_bool_0(state_, true); ca_.Goto(&block15, tmp18); } TNode<Uint32T> tmp19; TNode<BoolT> tmp20; if (block14.is_used()) { ca_.Bind(&block14); tmp19 = CodeStubAssembler(state_).Uint32Add(TNode<Uint32T>{parameter1}, TNode<Uint32T>{parameter2}); tmp20 = CodeStubAssembler(state_).Uint32LessThan(TNode<Uint32T>{tmp19}, TNode<Uint32T>{parameter1}); ca_.Goto(&block15, tmp20); } TNode<BoolT> phi_bb15_8; if (block15.is_used()) { ca_.Bind(&block15, &phi_bb15_8); ca_.Branch(phi_bb15_8, &block5, std::vector<compiler::Node*>{}, &block6, std::vector<compiler::Node*>{}); } if (block5.is_used()) { ca_.Bind(&block5); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kThrowWasmTrapArrayOutOfBounds, TNode<Object>()); } TNode<NativeContext> tmp21; TNode<Smi> tmp22; TNode<Smi> tmp23; TNode<Smi> tmp24; if (block6.is_used()) { ca_.Bind(&block6); tmp21 = LoadContextFromFrame_0(state_); tmp22 = CodeStubAssembler(state_).SmiFromUint32(TNode<Uint32T>{parameter0}); tmp23 = CodeStubAssembler(state_).SmiFromUint32(TNode<Uint32T>{parameter1}); tmp24 = CodeStubAssembler(state_).SmiFromUint32(TNode<Uint32T>{parameter2}); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmArrayCopy, tmp21, tmp4, tmp22, tmp5, tmp23, tmp24); } } TF_BUILTIN(WasmArrayCopy, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Uint32T> parameter0 = UncheckedParameter<Uint32T>(Descriptor::kDstIndex); USE(parameter0); TNode<Uint32T> parameter1 = UncheckedParameter<Uint32T>(Descriptor::kSrcIndex); USE(parameter1); TNode<Uint32T> parameter2 = UncheckedParameter<Uint32T>(Descriptor::kLength); USE(parameter2); TNode<WasmArray> parameter3 = UncheckedParameter<WasmArray>(Descriptor::kDstArray); USE(parameter3); TNode<WasmArray> parameter4 = UncheckedParameter<WasmArray>(Descriptor::kSrcArray); USE(parameter4); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<NativeContext> tmp0; TNode<Smi> tmp1; TNode<Smi> tmp2; TNode<Smi> tmp3; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = LoadContextFromFrame_0(state_); tmp1 = CodeStubAssembler(state_).SmiFromUint32(TNode<Uint32T>{parameter0}); tmp2 = CodeStubAssembler(state_).SmiFromUint32(TNode<Uint32T>{parameter1}); tmp3 = CodeStubAssembler(state_).SmiFromUint32(TNode<Uint32T>{parameter2}); CodeStubAssembler(state_).TailCallRuntime(Runtime::kWasmArrayCopy, tmp0, parameter3, tmp1, parameter4, tmp2, tmp3); } } TF_BUILTIN(WasmAllocateObjectWrapper, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Context> parameter0 = UncheckedParameter<Context>(Descriptor::kContext); USE(parameter0); TNode<Object> parameter1 = UncheckedParameter<Object>(Descriptor::kObj); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<JSObject> tmp0; TNode<Symbol> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = NewJSObject_0(state_, TNode<Context>{parameter0}); tmp1 = CodeStubAssembler(state_).WasmWrappedObjectSymbolConstant(); CodeStubAssembler(state_).CallRuntime(Runtime::kCreateDataProperty, parameter0, tmp0, tmp1, parameter1); CodeStubAssembler(state_).Return(tmp0); } } TF_BUILTIN(WasmSubtypeCheck, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<FixedArray> parameter0 = UncheckedParameter<FixedArray>(Descriptor::kObjectSupertypes); USE(parameter0); TNode<Map> parameter1 = UncheckedParameter<Map>(Descriptor::kRtt); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<IntPtrT> tmp0; TNode<Object> tmp1; TNode<WasmTypeInfo> tmp2; TNode<IntPtrT> tmp3; TNode<FixedArray> tmp4; TNode<IntPtrT> tmp5; TNode<Smi> tmp6; TNode<IntPtrT> tmp7; TNode<Smi> tmp8; TNode<BoolT> tmp9; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = FromConstexpr_intptr_constexpr_int31_0(state_, 32); tmp1 = CodeStubAssembler(state_).LoadReference<Object>(CodeStubAssembler::Reference{parameter1, tmp0}); tmp2 = TORQUE_CAST(TNode<Object>{tmp1}); tmp3 = FromConstexpr_intptr_constexpr_int31_0(state_, 16); tmp4 = CodeStubAssembler(state_).LoadReference<FixedArray>(CodeStubAssembler::Reference{tmp2, tmp3}); tmp5 = FromConstexpr_intptr_constexpr_int31_0(state_, 8); tmp6 = CodeStubAssembler(state_).LoadReference<Smi>(CodeStubAssembler::Reference{tmp4, tmp5}); tmp7 = FromConstexpr_intptr_constexpr_int31_0(state_, 8); tmp8 = CodeStubAssembler(state_).LoadReference<Smi>(CodeStubAssembler::Reference{parameter0, tmp7}); tmp9 = CodeStubAssembler(state_).SmiLessThanOrEqual(TNode<Smi>{tmp8}, TNode<Smi>{tmp6}); ca_.Branch(tmp9, &block1, std::vector<compiler::Node*>{}, &block2, std::vector<compiler::Node*>{}); } TNode<Int32T> tmp10; if (block1.is_used()) { ca_.Bind(&block1); tmp10 = FromConstexpr_int32_constexpr_int31_0(state_, 0); CodeStubAssembler(state_).Return(tmp10); } TNode<Object> tmp11; TNode<Map> tmp12; TNode<BoolT> tmp13; if (block2.is_used()) { ca_.Bind(&block2); tmp11 = CodeStubAssembler(state_).LoadFixedArrayElement(TNode<FixedArray>{parameter0}, TNode<Smi>{tmp6}); tmp12 = TORQUE_CAST(TNode<Object>{tmp11}); tmp13 = CodeStubAssembler(state_).TaggedEqual(TNode<HeapObject>{tmp12}, TNode<HeapObject>{parameter1}); ca_.Branch(tmp13, &block3, std::vector<compiler::Node*>{}, &block4, std::vector<compiler::Node*>{}); } TNode<Int32T> tmp14; if (block3.is_used()) { ca_.Bind(&block3); tmp14 = FromConstexpr_int32_constexpr_int31_0(state_, 1); CodeStubAssembler(state_).Return(tmp14); } TNode<Int32T> tmp15; if (block4.is_used()) { ca_.Bind(&block4); tmp15 = FromConstexpr_int32_constexpr_int31_0(state_, 0); CodeStubAssembler(state_).Return(tmp15); } } TF_BUILTIN(WasmInt32ToNumber, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Int32T> parameter0 = UncheckedParameter<Int32T>(Descriptor::kValue); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Number> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).ChangeInt32ToTagged(TNode<Int32T>{parameter0}); CodeStubAssembler(state_).Return(tmp0); } } TF_BUILTIN(WasmUint32ToNumber, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Uint32T> parameter0 = UncheckedParameter<Uint32T>(Descriptor::kValue); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Number> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).ChangeUint32ToTagged(TNode<Uint32T>{parameter0}); CodeStubAssembler(state_).Return(tmp0); } } TF_BUILTIN(UintPtr53ToNumber, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<UintPtrT> parameter0 = UncheckedParameter<UintPtrT>(Descriptor::kValue); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<UintPtrT> tmp0; TNode<BoolT> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = FromConstexpr_uintptr_constexpr_uintptr_0(state_, kSmiMaxValue); tmp1 = CodeStubAssembler(state_).UintPtrLessThanOrEqual(TNode<UintPtrT>{parameter0}, TNode<UintPtrT>{tmp0}); ca_.Branch(tmp1, &block1, std::vector<compiler::Node*>{}, &block2, std::vector<compiler::Node*>{}); } TNode<IntPtrT> tmp2; TNode<Smi> tmp3; if (block1.is_used()) { ca_.Bind(&block1); tmp2 = Convert_intptr_uintptr_0(state_, TNode<UintPtrT>{parameter0}); tmp3 = Convert_Smi_intptr_0(state_, TNode<IntPtrT>{tmp2}); CodeStubAssembler(state_).Return(tmp3); } TNode<Float64T> tmp4; TNode<HeapNumber> tmp5; if (block2.is_used()) { ca_.Bind(&block2); tmp4 = CodeStubAssembler(state_).ChangeUintPtrToFloat64(TNode<UintPtrT>{parameter0}); tmp5 = CodeStubAssembler(state_).AllocateHeapNumberWithValue(TNode<Float64T>{tmp4}); CodeStubAssembler(state_).Return(tmp5); } } TF_BUILTIN(WasmAtomicNotify, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<UintPtrT> parameter0 = UncheckedParameter<UintPtrT>(Descriptor::kOffset); USE(parameter0); TNode<Uint32T> parameter1 = UncheckedParameter<Uint32T>(Descriptor::kCount); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<WasmInstanceObject> tmp0; TNode<NativeContext> tmp1; TNode<Number> tmp2; TNode<Number> tmp3; TNode<Smi> tmp4; TNode<Int32T> tmp5; TNode<Uint32T> tmp6; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); tmp1 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp0}); tmp2 = ca_.CallStub<Number>(Builtins::CallableFor(ca_.isolate(), Builtin::kUintPtr53ToNumber), TNode<Object>(), parameter0); tmp3 = ca_.CallStub<Number>(Builtins::CallableFor(ca_.isolate(), Builtin::kWasmUint32ToNumber), TNode<Object>(), parameter1); tmp4 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kWasmAtomicNotify, tmp1, tmp0, tmp2, tmp3)); tmp5 = CodeStubAssembler(state_).SmiToInt32(TNode<Smi>{tmp4}); tmp6 = CodeStubAssembler(state_).Unsigned(TNode<Int32T>{tmp5}); CodeStubAssembler(state_).Return(tmp6); } } TF_BUILTIN(WasmI32AtomicWait64, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<UintPtrT> parameter0 = UncheckedParameter<UintPtrT>(Descriptor::kOffset); USE(parameter0); TNode<Int32T> parameter1 = UncheckedParameter<Int32T>(Descriptor::kExpectedValue); USE(parameter1); TNode<IntPtrT> parameter2 = UncheckedParameter<IntPtrT>(Descriptor::kTimeout); USE(parameter2); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); if (block0.is_used()) { ca_.Bind(&block0); if (((CodeStubAssembler(state_).Is64()))) { ca_.Goto(&block1); } else { ca_.Goto(&block2); } } TNode<WasmInstanceObject> tmp0; TNode<NativeContext> tmp1; TNode<Number> tmp2; TNode<Number> tmp3; TNode<BigInt> tmp4; TNode<Smi> tmp5; TNode<Int32T> tmp6; TNode<Uint32T> tmp7; if (block1.is_used()) { ca_.Bind(&block1); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); tmp1 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp0}); tmp2 = ca_.CallStub<Number>(Builtins::CallableFor(ca_.isolate(), Builtin::kUintPtr53ToNumber), TNode<Object>(), parameter0); tmp3 = ca_.CallStub<Number>(Builtins::CallableFor(ca_.isolate(), Builtin::kWasmInt32ToNumber), TNode<Object>(), parameter1); tmp4 = ca_.CallStub<BigInt>(Builtins::CallableFor(ca_.isolate(), Builtin::kI64ToBigInt), TNode<Object>(), parameter2); tmp5 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kWasmI32AtomicWait, tmp1, tmp0, tmp2, tmp3, tmp4)); tmp6 = CodeStubAssembler(state_).SmiToInt32(TNode<Smi>{tmp5}); tmp7 = CodeStubAssembler(state_).Unsigned(TNode<Int32T>{tmp6}); CodeStubAssembler(state_).Return(tmp7); } if (block2.is_used()) { ca_.Bind(&block2); CodeStubAssembler(state_).Unreachable(); } } TF_BUILTIN(WasmI64AtomicWait64, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<UintPtrT> parameter0 = UncheckedParameter<UintPtrT>(Descriptor::kOffset); USE(parameter0); TNode<IntPtrT> parameter1 = UncheckedParameter<IntPtrT>(Descriptor::kExpectedValue); USE(parameter1); TNode<IntPtrT> parameter2 = UncheckedParameter<IntPtrT>(Descriptor::kTimeout); USE(parameter2); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); if (block0.is_used()) { ca_.Bind(&block0); if (((CodeStubAssembler(state_).Is64()))) { ca_.Goto(&block1); } else { ca_.Goto(&block2); } } TNode<WasmInstanceObject> tmp0; TNode<NativeContext> tmp1; TNode<Number> tmp2; TNode<BigInt> tmp3; TNode<BigInt> tmp4; TNode<Smi> tmp5; TNode<Int32T> tmp6; TNode<Uint32T> tmp7; if (block1.is_used()) { ca_.Bind(&block1); tmp0 = WasmBuiltinsAssembler(state_).LoadInstanceFromFrame(); tmp1 = WasmBuiltinsAssembler(state_).LoadContextFromInstance(TNode<WasmInstanceObject>{tmp0}); tmp2 = ca_.CallStub<Number>(Builtins::CallableFor(ca_.isolate(), Builtin::kUintPtr53ToNumber), TNode<Object>(), parameter0); tmp3 = ca_.CallStub<BigInt>(Builtins::CallableFor(ca_.isolate(), Builtin::kI64ToBigInt), TNode<Object>(), parameter1); tmp4 = ca_.CallStub<BigInt>(Builtins::CallableFor(ca_.isolate(), Builtin::kI64ToBigInt), TNode<Object>(), parameter2); tmp5 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kWasmI64AtomicWait, tmp1, tmp0, tmp2, tmp3, tmp4)); tmp6 = CodeStubAssembler(state_).SmiToInt32(TNode<Smi>{tmp5}); tmp7 = CodeStubAssembler(state_).Unsigned(TNode<Int32T>{tmp6}); CodeStubAssembler(state_).Return(tmp7); } if (block2.is_used()) { ca_.Bind(&block2); CodeStubAssembler(state_).Unreachable(); } } TF_BUILTIN(WasmGetOwnProperty, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Context> parameter0 = UncheckedParameter<Context>(Descriptor::kContext); USE(parameter0); TNode<Object> parameter1 = UncheckedParameter<Object>(Descriptor::kObject); USE(parameter1); TNode<Name> parameter2 = UncheckedParameter<Name>(Descriptor::kUniqueName); USE(parameter2); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block10(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block11(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kDeferred); ca_.Goto(&block0); TNode<HeapObject> tmp0; if (block0.is_used()) { ca_.Bind(&block0); compiler::CodeAssemblerLabel label1(&ca_); tmp0 = CodeStubAssembler(state_).TaggedToHeapObject(TNode<Object>{parameter1}, &label1); ca_.Goto(&block3); if (label1.is_used()) { ca_.Bind(&label1); ca_.Goto(&block4); } } if (block4.is_used()) { ca_.Bind(&block4); ca_.Goto(&block2); } TNode<JSReceiver> tmp2; if (block3.is_used()) { ca_.Bind(&block3); compiler::CodeAssemblerLabel label3(&ca_); tmp2 = Cast_JSReceiver_0(state_, TNode<HeapObject>{tmp0}, &label3); ca_.Goto(&block5); if (label3.is_used()) { ca_.Bind(&label3); ca_.Goto(&block6); } } if (block6.is_used()) { ca_.Bind(&block6); ca_.Goto(&block2); } TNode<IntPtrT> tmp4; TNode<Map> tmp5; TNode<Uint16T> tmp6; if (block5.is_used()) { ca_.Bind(&block5); tmp4 = FromConstexpr_intptr_constexpr_int31_0(state_, 0); tmp5 = CodeStubAssembler(state_).LoadReference<Map>(CodeStubAssembler::Reference{tmp2, tmp4}); tmp6 = CodeStubAssembler(state_).LoadInstanceType(TNode<HeapObject>{tmp2}); compiler::CodeAssemblerLabel label7(&ca_); compiler::CodeAssemblerLabel label8(&ca_); compiler::CodeAssemblerLabel label9(&ca_); CodeStubAssembler(state_).TryHasOwnProperty(TNode<HeapObject>{tmp2}, TNode<Map>{tmp5}, TNode<Uint16T>{tmp6}, TNode<Name>{parameter2}, &label7, &label8, &label9); if (label7.is_used()) { ca_.Bind(&label7); ca_.Goto(&block9); } if (label8.is_used()) { ca_.Bind(&label8); ca_.Goto(&block10); } if (label9.is_used()) { ca_.Bind(&label9); ca_.Goto(&block11); } } TNode<Smi> tmp10; if (block9.is_used()) { ca_.Bind(&block9); tmp10 = CodeStubAssembler(state_).SmiConstant(OnNonExistent::kReturnUndefined); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kGetPropertyWithReceiver, parameter0, tmp2, parameter2, tmp2, tmp10); } if (block10.is_used()) { ca_.Bind(&block10); ca_.Goto(&block2); } if (block11.is_used()) { ca_.Bind(&block11); ca_.Goto(&block2); } TNode<Oddball> tmp11; if (block2.is_used()) { ca_.Bind(&block2); tmp11 = Undefined_0(state_); CodeStubAssembler(state_).Return(tmp11); } } TF_BUILTIN(WasmTrap, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Smi> parameter0 = UncheckedParameter<Smi>(Descriptor::kError); USE(parameter0); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<NativeContext> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = LoadContextFromFrame_0(state_); CodeStubAssembler(state_).TailCallRuntime(Runtime::kThrowWasmError, tmp0, parameter0); } } TF_BUILTIN(ThrowWasmTrapUnreachable, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapUnreachable); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapMemOutOfBounds, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapMemOutOfBounds); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapUnalignedAccess, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapUnalignedAccess); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapDivByZero, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapDivByZero); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapDivUnrepresentable, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapDivUnrepresentable); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapRemByZero, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapRemByZero); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapFloatUnrepresentable, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapFloatUnrepresentable); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapFuncSigMismatch, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapFuncSigMismatch); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapDataSegmentDropped, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapDataSegmentDropped); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapElemSegmentDropped, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapElemSegmentDropped); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapTableOutOfBounds, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapTableOutOfBounds); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapRethrowNull, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapRethrowNull); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapNullDereference, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapNullDereference); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapIllegalCast, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapIllegalCast); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapArrayOutOfBounds, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapArrayOutOfBounds); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TF_BUILTIN(ThrowWasmTrapArrayTooLarge, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiConstant(MessageTemplate::kWasmTrapArrayTooLarge); CodeStubAssembler(state_).TailCallBuiltin(Builtin::kWasmTrap, TNode<Object>(), tmp0); } } TNode<IntPtrT> Convert_intptr_constexpr_int32_0(compiler::CodeAssemblerState* state_, int32_t p_i) { compiler::CodeAssembler ca_(state_); compiler::CodeAssembler::SourcePositionScope pos_scope(&ca_); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<IntPtrT> tmp0; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = FromConstexpr_intptr_constexpr_int32_0(state_, p_i); ca_.Goto(&block2); } ca_.Bind(&block2); return TNode<IntPtrT>{tmp0}; } } // namespace internal } // namespace v8