Version 3.14.0-201.0.dev Merge 938322ce3d83e55b4ad39c807608510d30152983 into dev
diff --git a/pkg/native_compiler/lib/back_end/arm64/assembler.dart b/pkg/native_compiler/lib/back_end/arm64/assembler.dart index 471a031..b8d4270 100644 --- a/pkg/native_compiler/lib/back_end/arm64/assembler.dart +++ b/pkg/native_compiler/lib/back_end/arm64/assembler.dart
@@ -1040,6 +1040,42 @@ ldr(result, RegExtRegAddress(result, classId, Extend.UXTX, scaled: true)); } + /// Load array element from `[base + index*elemSize + offset]`. + @override + void loadIndexed( + Register result, + Register base, + Register index, + int offset, [ + OperandSize elemSize = .s64, + ]) { + if (offset == 0) { + ldr(result, RegExtRegAddress(base, index, .UXTX, scaled: true), elemSize); + } else { + add( + result, + base, + ShiftedRegOperand(index, .LSL, elemSize.log2sizeInBytes), + ); + ldr(result, address(result, offset), elemSize); + } + } + + void loadAcquire( + Register result, + Register base, + int offset, [ + OperandSize sz = OperandSize.s64, + Register scratch = temp2Reg, + ]) { + if (offset != 0) { + addImmediate(scratch, base, offset, .s64, scratch); + ldar(result, scratch, sz); + } else { + ldar(result, base, sz); + } + } + @override void combineHashes(Register hash, Register other) { // hash += other
diff --git a/pkg/native_compiler/lib/back_end/arm64/code_generator.dart b/pkg/native_compiler/lib/back_end/arm64/code_generator.dart index bc9003a..12da173 100644 --- a/pkg/native_compiler/lib/back_end/arm64/code_generator.dart +++ b/pkg/native_compiler/lib/back_end/arm64/code_generator.dart
@@ -1744,35 +1744,25 @@ hasFunctionTypeArgs: hasFunctionTypeArgs, ), ); - final stub = switch (stc.numInputs) { - 1 => StubCode.Subtype1TestCache, - 2 => StubCode.Subtype2TestCache, - 3 => StubCode.Subtype3TestCache, - 4 => StubCode.Subtype4TestCache, - 6 => StubCode.Subtype6TestCache, - _ => - throw 'Unexpected number of SubtypeTestCache inputs ${stc.numInputs} (type $type)', - }; - final Label slowPath = addSlowPath(() { assert(stackFrame.maxArgumentsStackSlots >= 6); _asm.loadFromPool(tempReg, type.dartType); _asm.stp( - TypeTestingStub.subtypeTestCacheReg, + SubtypeTestCacheStub.subtypeTestCacheReg, hasFunctionTypeArgs - ? TypeTestingStub.functionTypeArgumentsReg + ? SubtypeTestCacheStub.functionTypeArgumentsReg : nullReg, RegOffsetAddress(stackPointerReg, 0), ); _asm.stp( hasInstantiatorTypeArgs - ? TypeTestingStub.instantiatorTypeArgumentsReg + ? SubtypeTestCacheStub.instantiatorTypeArgumentsReg : nullReg, tempReg, RegOffsetAddress(stackPointerReg, 2 * wordSize), ); _asm.stp( - TypeTestingStub.instanceReg, + SubtypeTestCacheStub.instanceReg, nullReg, // Space for result RegOffsetAddress(stackPointerReg, 4 * wordSize), ); @@ -1781,11 +1771,15 @@ _asm.b(done); }); - _asm.loadFromPool(TypeTestingStub.subtypeTestCacheReg, stc); - _asm.callVmStub(stub); - _asm.cmp(TypeTestingStub.subtypeTestCacheResultReg, nullReg); + _asm.loadFromPool(SubtypeTestCacheStub.subtypeTestCacheReg, stc); + final stub = backEndState.stubFactory.getSubtypeTestCacheStub( + stc.numInputs, + ); + _asm.callStub(stub); + + _asm.cmp(SubtypeTestCacheStub.subtypeTestCacheResultReg, nullReg); _asm.b(slowPath, .equal); - _asm.mov(resultReg, TypeTestingStub.subtypeTestCacheResultReg); + _asm.mov(resultReg, SubtypeTestCacheStub.subtypeTestCacheResultReg); _asm.b(done); }
diff --git a/pkg/native_compiler/lib/back_end/arm64/constraints.dart b/pkg/native_compiler/lib/back_end/arm64/constraints.dart index 75f0d6a..62face9 100644 --- a/pkg/native_compiler/lib/back_end/arm64/constraints.dart +++ b/pkg/native_compiler/lib/back_end/arm64/constraints.dart
@@ -394,17 +394,20 @@ }; if (callsSubtypeTestCacheStub) { final inputs = [ - TypeTestingStub.instanceReg, + SubtypeTestCacheStub.instanceReg, if (instr.inputCount > 1) ...const [ - TypeTestingStub.instantiatorTypeArgumentsReg, - TypeTestingStub.functionTypeArgumentsReg, + SubtypeTestCacheStub.instantiatorTypeArgumentsReg, + SubtypeTestCacheStub.functionTypeArgumentsReg, ], ]; return InstructionConstraints( - TypeTestingStub.subtypeTestCacheResultReg, + SubtypeTestCacheStub.subtypeTestCacheResultReg, inputs, // TODO: save registers on slow path - allRegistersExcept(TypeTestingStub.subtypeTestCacheResultReg, inputs), + allRegistersExcept( + SubtypeTestCacheStub.subtypeTestCacheResultReg, + inputs, + ), Safepoint(), ); }
diff --git a/pkg/native_compiler/lib/back_end/arm64/stub_code_generator.dart b/pkg/native_compiler/lib/back_end/arm64/stub_code_generator.dart index d1aead6..f6f0e7b 100644 --- a/pkg/native_compiler/lib/back_end/arm64/stub_code_generator.dart +++ b/pkg/native_compiler/lib/back_end/arm64/stub_code_generator.dart
@@ -3,6 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'package:cfg/ir/constant_value.dart'; +import 'package:cfg/utils/misc.dart'; import 'package:kernel/ast.dart' as ast show Class; import 'package:native_compiler/back_end/arm64/assembler.dart'; import 'package:native_compiler/back_end/assembler.dart'; @@ -173,6 +174,507 @@ } } +final class SubtypeTestCacheStub extends Arm64StubCodeGenerator { + static const Register instanceReg = R0; + static const Register dstTypeReg = R8; + static const Register instantiatorTypeArgumentsReg = R2; + static const Register functionTypeArgumentsReg = R1; + static const Register subtypeTestCacheReg = R3; + static const Register scratchReg = R4; + static const Register subtypeTestCacheResultReg = R7; + static const Register entryPointReg = R9; + static const Register instanceDelayedFunctionTypeArgumentsReg = R10; + + static const Register instanceCidOrSignatureReg = R6; + static const Register instanceInstantiatorTypeArgumentsReg = R5; + static const Register instanceParentFunctionTypeArgumentsReg = R9; + static const Register cacheEntriesEndReg = R11; + static const Register cacheContentsSizeReg = R12; + static const Register probeDistanceReg = R13; + + final int numInputs; + SubtypeTestCacheStub(super.vmOffsets, super.objectLayout, this.numInputs); + + VMOffsets get vmOffsets => _asm.vmOffsets; + ObjectLayout get objectLayout => _asm.objectLayout; + int get compressedWordSize => objectLayout.compressedWordSize; + + void _generateSubtypeTestCacheLoopBody( + Register cacheEntryReg, + Label found, + Label notFound, + Label nextIteration, + ) { + // TODO: compressed pointers + + final inputRegs = [ + instanceCidOrSignatureReg, + instanceInstantiatorTypeArgumentsReg, + instantiatorTypeArgumentsReg, + functionTypeArgumentsReg, + instanceParentFunctionTypeArgumentsReg, + instanceDelayedFunctionTypeArgumentsReg, + dstTypeReg, + ]; + final elemIndex = [ + vmOffsets.SubtypeTestCache_kInstanceCidOrSignature, + vmOffsets.SubtypeTestCache_kInstanceTypeArguments, + vmOffsets.SubtypeTestCache_kInstantiatorTypeArguments, + vmOffsets.SubtypeTestCache_kFunctionTypeArguments, + vmOffsets.SubtypeTestCache_kInstanceParentFunctionTypeArguments, + vmOffsets.SubtypeTestCache_kInstanceDelayedFunctionTypeArguments, + vmOffsets.SubtypeTestCache_kDestinationType, + ]; + assert(inputRegs.length == elemIndex.length); + + for (var i = 1; i <= numInputs; i++) { + if (i == 1) { + _asm.loadAcquire( + scratchReg, + cacheEntryReg, + vmOffsets.SubtypeTestCache_kInstanceCidOrSignature * + compressedWordSize, + ); + _asm.cmp(scratchReg, nullReg); + _asm.b(notFound, .equal); + } else { + _asm.ldr( + scratchReg, + _asm.address(cacheEntryReg, elemIndex[i - 1] * compressedWordSize), + ); + } + _asm.cmp(scratchReg, inputRegs[i - 1]); + if (i == numInputs) { + _asm.b(found, .equal); + } else { + _asm.b(nextIteration, .notEqual); + } + } + } + + void _generateLinearSearch( + Register cacheEntryReg, + Label found, + Label notFound, + ) { + _asm.addImmediate( + cacheEntryReg, + cacheEntryReg, + vmOffsets.Array_data_offset - heapObjectTag, + ); + + final loop = Label(); + final nextIteration = Label(); + _asm.bind(loop); + + _generateSubtypeTestCacheLoopBody( + cacheEntryReg, + found, + notFound, + nextIteration, + ); + + // Next iteration + _asm.bind(nextIteration); + _asm.addImmediate( + cacheEntryReg, + cacheEntryReg, + compressedWordSize * vmOffsets.SubtypeTestCache_kTestEntryLength, + ); + + _asm.b(loop); + } + + void getAbstractTypeHash(Register dst, Register src, Label notFound) { + _asm.ldr(dst, _asm.fieldAddress(src, vmOffsets.AbstractType_hash_offset)); + _asm.smiUntag(dst); + // Hash of 0 means the hash hasn't been computed yet and we need to go to runtime. + _asm.cbz(dst, notFound); + } + + void getTypeArgumentsHash(Register dst, Register src, Label notFound) { + final done = Label(); + _asm.loadImmediate(dst, vmOffsets.TypeArguments_kAllDynamicHash); + _asm.cmp(src, nullReg); + _asm.b(done, .equal); + _asm.ldr(dst, _asm.fieldAddress(src, vmOffsets.TypeArguments_hash_offset)); + _asm.smiUntag(dst); + _asm.cbz(dst, notFound); + _asm.bind(done); + } + + void _generateHashSearch( + Register cacheEntryReg, + Register tableLengthReg, + Label found, + Label notFound, + ) { + // TODO: compressed pointers + + // Since the test entry size is a power of 2, we can use lsr to divide. + final testEntryLengthLog2 = log2OfPowerOf2( + vmOffsets.SubtypeTestCache_kTestEntryLength, + ); + + // Before we finish calculating the initial probe entry, we'll need the + // starting cache entry and the number of entries. We'll store these in + // [cacheContentsSizeReg] and [probeDistanceReg], respectively. + + final startingEntryReg = cacheContentsSizeReg; // alias for convenience + + // Hash cache traversal + // Calculating number of entries + // The array length is a Smi so it needs to be untagged. + _asm.smiUntag(scratchReg, tableLengthReg); + final entriesCountReg = probeDistanceReg; // alias for convenience + _asm.lsr(entriesCountReg, scratchReg, testEntryLengthLog2); + + // Calculating starting entry address + _asm.addImmediate( + cacheEntryReg, + cacheEntryReg, + vmOffsets.Array_data_offset - heapObjectTag, + ); + _asm.mov(startingEntryReg, cacheEntryReg); + + // Calculating end of entries address + _asm.add( + cacheEntriesEndReg, + cacheEntryReg, + ShiftedRegOperand( + entriesCountReg, + .LSL, + testEntryLengthLog2 + log2wordSize, + ), + ); + + // Hash the entry inputs + { + final done = Label(); + // Assume a Smi tagged instance cid to avoid a branch in the common case. + _asm.mov(cacheEntryReg, instanceCidOrSignatureReg); + _asm.smiUntag(cacheEntryReg); + _asm.branchIfSmi(instanceCidOrSignatureReg, done); + getAbstractTypeHash(cacheEntryReg, instanceCidOrSignatureReg, notFound); + _asm.bind(done); + } + if (numInputs >= 7) { + getAbstractTypeHash(scratchReg, dstTypeReg, notFound); + _asm.combineHashes(cacheEntryReg, scratchReg); + } + if (numInputs >= 6) { + getTypeArgumentsHash( + scratchReg, + instanceDelayedFunctionTypeArgumentsReg, + notFound, + ); + _asm.combineHashes(cacheEntryReg, scratchReg); + } + if (numInputs >= 5) { + getTypeArgumentsHash( + scratchReg, + instanceParentFunctionTypeArgumentsReg, + notFound, + ); + _asm.combineHashes(cacheEntryReg, scratchReg); + } + if (numInputs >= 4) { + getTypeArgumentsHash(scratchReg, functionTypeArgumentsReg, notFound); + _asm.combineHashes(cacheEntryReg, scratchReg); + } + if (numInputs >= 3) { + getTypeArgumentsHash(scratchReg, instantiatorTypeArgumentsReg, notFound); + _asm.combineHashes(cacheEntryReg, scratchReg); + } + if (numInputs >= 2) { + getTypeArgumentsHash( + scratchReg, + instanceInstantiatorTypeArgumentsReg, + notFound, + ); + _asm.combineHashes(cacheEntryReg, scratchReg); + } + _asm.finalizeHash(32, cacheEntryReg); + + // This requires the number of entries in a hash cache to be a power of 2. + // Converting hash to probe entry index + // The entry count is not needed after this point; create the mask in place. + final countMaskReg = entriesCountReg; // alias for convenience + _asm.addImmediate(countMaskReg, countMaskReg, -1); + _asm.and(cacheEntryReg, cacheEntryReg, countMaskReg); + // Now set the register to the initial probe distance in words. + _asm.loadImmediate( + probeDistanceReg, + compressedWordSize * vmOffsets.SubtypeTestCache_kTestEntryLength, + ); + + // Now cacheEntryReg is the starting probe entry index. + // Converting probe entry index to probe entry address + _asm.add( + cacheEntryReg, + startingEntryReg, + ShiftedRegOperand( + cacheEntryReg, + .LSL, + testEntryLengthLog2 + log2wordSize, + ), + ); + + // Now set the register to the negated size of the cache contents in words. + final cacheNegatedSizeReg = startingEntryReg; // alias for convenience + _asm.sub(cacheNegatedSizeReg, startingEntryReg, cacheEntriesEndReg); + + final loop = Label(); + final nextIteration = Label(); + _asm.bind(loop); + + _generateSubtypeTestCacheLoopBody( + cacheEntryReg, + found, + notFound, + nextIteration, + ); + + _asm.bind(nextIteration); + // Move to next entry + { + _asm.add(cacheEntryReg, cacheEntryReg, probeDistanceReg); + // Adjust probe distance + _asm.addImmediate( + probeDistanceReg, + probeDistanceReg, + compressedWordSize * vmOffsets.SubtypeTestCache_kTestEntryLength, + ); + } + // Check for leaving array + // Make sure we haven't run off the array. + _asm.cmp(cacheEntryReg, cacheEntriesEndReg); + _asm.b(loop, .less); + // Wrap around to start of entries + // Add the negated size of the cache contents. + _asm.add(cacheEntryReg, cacheEntryReg, cacheNegatedSizeReg); + _asm.b(loop); + } + + @override + void _generate() { + // TODO: compressed pointers + _asm.push(LR); + + { + final continueWithSearch = Label(); + _asm.ldr( + scratchReg, + _asm.fieldAddress( + subtypeTestCacheReg, + vmOffsets.SubtypeTestCache_num_inputs_offset, + ), + OperandSize.u32, + ); + _asm.cmpImmediate(scratchReg, numInputs); + _asm.b(continueWithSearch, .equal); + _asm.unimplemented('Unexpected subtype cache number of inputs'); + _asm.bind(continueWithSearch); + } + const cacheArrayReg = subtypeTestCacheResultReg; + const cacheEntryReg = cacheArrayReg; + + _asm.loadAcquire( + cacheEntryReg, + subtypeTestCacheReg, + vmOffsets.SubtypeTestCache_cache_offset - heapObjectTag, + ); + + if (numInputs >= 3) { + _asm.loadClassIdMayBeSmi(instanceCidOrSignatureReg, instanceReg); + } else { + // If the type is fully instantiated, then it can be determined at compile + // time whether Smi is a subtype of the type or not. Thus, this code should + // never be called with a Smi instance. + _asm.loadClassId(instanceCidOrSignatureReg, instanceReg); + } + + _asm.cmpImmediate(instanceCidOrSignatureReg, ClassId.ClosureCid.index); + final nonClosure = Label(); + _asm.b(nonClosure, .notEqual); + + // Closure handling + _asm.ldr( + instanceCidOrSignatureReg, + _asm.fieldAddress(instanceReg, vmOffsets.Closure_function_offset), + ); + _asm.ldr( + instanceCidOrSignatureReg, + _asm.fieldAddress( + instanceCidOrSignatureReg, + vmOffsets.Function_signature_offset, + ), + ); + + final initialized = Label(); + + if (numInputs >= 2) { + _asm.ldr( + scratchReg, + _asm.fieldAddress( + instanceReg, + vmOffsets.Closure_length_and_flags_offset, + ), + ); + { + // TODO: VerifySmi only in debug mode + final isSmi = Label(); + _asm.tbz(scratchReg, smiBit, isSmi); + _asm.unimplemented('Smi is expected'); + _asm.bind(isSmi); + } + + final loadFunctionTypeArguments = Label(); + _asm.mov(instanceInstantiatorTypeArgumentsReg, nullReg); + _asm.tbz( + scratchReg, + vmOffsets.UntaggedClosure_kHasInstantiatorTypeArgumentsBit + smiShift, + (numInputs >= 5 ? loadFunctionTypeArguments : initialized), + ); + _asm.ubfx( + instanceInstantiatorTypeArgumentsReg, + scratchReg, + vmOffsets.UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos + + smiShift, + vmOffsets.UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize, + ); + + _asm.loadIndexed( + instanceInstantiatorTypeArgumentsReg, + instanceReg, + instanceInstantiatorTypeArgumentsReg, + vmOffsets.Closure_elementOffset(0) - heapObjectTag, + ); + + if (numInputs >= 5) { + _asm.bind(loadFunctionTypeArguments); + + final loadDelayedFunctionTypeArguments = Label(); + _asm.mov(instanceParentFunctionTypeArgumentsReg, nullReg); + _asm.tbz( + scratchReg, + vmOffsets.UntaggedClosure_kHasFunctionTypeArgumentsBit + smiShift, + (numInputs >= 6 ? loadDelayedFunctionTypeArguments : initialized), + ); + _asm.ubfx( + instanceParentFunctionTypeArgumentsReg, + scratchReg, + vmOffsets.UntaggedClosure_kFunctionTypeArgumentsIndexBitsPos + + smiShift, + vmOffsets.UntaggedClosure_kFunctionTypeArgumentsIndexBitsSize, + ); + _asm.loadIndexed( + instanceParentFunctionTypeArgumentsReg, + instanceReg, + instanceParentFunctionTypeArgumentsReg, + vmOffsets.Closure_elementOffset(0) - heapObjectTag, + ); + + if (numInputs >= 6) { + _asm.bind(loadDelayedFunctionTypeArguments); + + _asm.mov(instanceDelayedFunctionTypeArgumentsReg, nullReg); + _asm.tbz( + scratchReg, + vmOffsets.UntaggedClosure_kHasDelayedTypeArgumentsBit + smiShift, + initialized, + ); + _asm.ldr( + instanceDelayedFunctionTypeArgumentsReg, + _asm.fieldAddress( + instanceReg, + vmOffsets.Closure_elementOffset( + vmOffsets.UntaggedClosure_kDelayedTypeArgumentsIndex, + ), + ), + ); + } + } + _asm.b(initialized); + } + + _asm.bind(nonClosure); + if (numInputs >= 2) { + _asm.loadClassById(scratchReg, instanceCidOrSignatureReg); + _asm.mov(instanceInstantiatorTypeArgumentsReg, nullReg); + _asm.ldr( + scratchReg, + _asm.fieldAddress( + scratchReg, + vmOffsets.Class_host_type_arguments_field_offset_in_words_offset, + ), + OperandSize.u32, + ); + _asm.cmpImmediate( + scratchReg, + vmOffsets.Class_kNoTypeArguments, + OperandSize.s32, + ); + final hasNoTypeArgument = Label(); + _asm.b(hasNoTypeArgument, .equal); + + _asm.add( + instanceInstantiatorTypeArgumentsReg, + instanceReg, + ShiftedRegOperand(scratchReg, .LSL, log2wordSize), + ); + _asm.ldr( + instanceInstantiatorTypeArgumentsReg, + _asm.address(instanceInstantiatorTypeArgumentsReg, -heapObjectTag), + ); + + _asm.bind(hasNoTypeArgument); + + if (numInputs >= 5) { + _asm.mov(instanceParentFunctionTypeArgumentsReg, nullReg); + if (numInputs >= 6) { + _asm.mov(instanceDelayedFunctionTypeArgumentsReg, nullReg); + } + } + } + _asm.smiTag(instanceCidOrSignatureReg); + _asm.bind(initialized); + + _asm.ldr( + scratchReg, + _asm.fieldAddress(cacheEntryReg, vmOffsets.Array_length_offset), + ); + _asm.cmpImmediate( + scratchReg, + vmOffsets.SubtypeTestCache_kMaxLinearCacheSize << smiShift, + ); + final isHash = Label(); + _asm.b(isHash, .greater); + + final notFound = Label(); + final found = Label(); + _generateLinearSearch(cacheEntryReg, found, notFound); + _asm.bind(found); + _asm.ldr( + subtypeTestCacheResultReg, + _asm.address( + cacheArrayReg, + compressedWordSize * vmOffsets.SubtypeTestCache_kTestResult, + ), + ); + _asm.pop(LR); + _asm.ret(); + + _asm.bind(notFound); + _asm.mov(subtypeTestCacheResultReg, nullReg); + _asm.pop(LR); + _asm.ret(); + + _asm.bind(isHash); + _generateHashSearch(cacheEntryReg, scratchReg, found, notFound); + } +} + final class TypeTestingStub { static const Register instanceReg = R0; static const Register dstTypeReg = R8; @@ -182,6 +684,7 @@ static const Register scratchReg = R4; static const Register subtypeTestCacheResultReg = R7; static const Register entryPointReg = R9; + static const Register instanceDelayedFunctionTypeArgumentsReg = R10; } final class InstantiateTypeArgumentsStub { @@ -229,4 +732,8 @@ Register objectReg, Register valueReg, ) => WriteBarrierStub(vmOffsets, objectLayout, objectReg, valueReg); + + @override + StubCodeGenerator subtypeTestCacheStubGenerator(int n) => + SubtypeTestCacheStub(vmOffsets, objectLayout, n); }
diff --git a/pkg/native_compiler/lib/back_end/assembler.dart b/pkg/native_compiler/lib/back_end/assembler.dart index 16f05ac..3578b64 100644 --- a/pkg/native_compiler/lib/back_end/assembler.dart +++ b/pkg/native_compiler/lib/back_end/assembler.dart
@@ -219,6 +219,13 @@ void loadClassIdMayBeSmi(Register result, Register object); void loadIsolateGroup(Register rd); void loadClassById(Register result, Register classId); + void loadIndexed( + Register result, + Register base, + Register index, + int offset, [ + OperandSize elemSize = .s64, + ]); void combineHashes(Register hash, Register other); void finalizeHash(int bitSize, Register hash);
diff --git a/pkg/native_compiler/lib/back_end/stub_code_generator.dart b/pkg/native_compiler/lib/back_end/stub_code_generator.dart index 492e3db..de6a85a 100644 --- a/pkg/native_compiler/lib/back_end/stub_code_generator.dart +++ b/pkg/native_compiler/lib/back_end/stub_code_generator.dart
@@ -18,6 +18,7 @@ final CodeConsumer consumeGeneratedCode; Map<ast.Class, Code> _allocationStubs = {}; Map<(Register, Register), Code> _writeBarrierStubs = {}; + List<Code?> _subtypeTestCacheStubs = List<Code?>.filled(8, null); StubFactory(this.consumeGeneratedCode); @@ -28,6 +29,8 @@ Register valueReg, ); + StubCodeGenerator subtypeTestCacheStubGenerator(int n); + Code _generateCode(String name, StubCodeGenerator generator) { final code = generator.generate(name); consumeGeneratedCode(code); @@ -42,4 +45,10 @@ 'WriteBarrierStub for $objectReg, $valueReg', writeBarrierStubGenerator(objectReg, valueReg), ); + + Code getSubtypeTestCacheStub(int numInputs) => + _subtypeTestCacheStubs[numInputs] ??= _generateCode( + 'SubtypeTestCacheStub', + subtypeTestCacheStubGenerator(numInputs), + ); }
diff --git a/pkg/native_compiler/lib/runtime/vm_offsets.g.dart b/pkg/native_compiler/lib/runtime/vm_offsets.g.dart index 5c7b323f..440a4cd 100644 --- a/pkg/native_compiler/lib/runtime/vm_offsets.g.dart +++ b/pkg/native_compiler/lib/runtime/vm_offsets.g.dart
@@ -16,6 +16,7 @@ int get Array_kMaxElements => throw 'Unknown'; int get Array_kMaxNewSpaceElements => throw 'Unknown'; int get Context_kMaxElements => throw 'Unknown'; + int get Class_kNoTypeArguments => throw 'Unknown'; int get Function_kKindBitsPos => throw 'Unknown'; int get Function_kKindBitsSize => throw 'Unknown'; int get Function_kRecognizedBitsPos => throw 'Unknown'; @@ -69,8 +70,15 @@ int get SubtypeTestCache_kInstantiatorTypeArguments => throw 'Unknown'; int get SubtypeTestCache_kTestEntryLength => throw 'Unknown'; int get SubtypeTestCache_kMaxInputs => throw 'Unknown'; + int get SubtypeTestCache_kMaxLinearCacheSize => throw 'Unknown'; int get SubtypeTestCache_kTestResult => throw 'Unknown'; + int get TypeArguments_kAllDynamicHash => throw 'Unknown'; int get TypeArguments_kMaxElements => throw 'Unknown'; + int get UntaggedClosure_kDelayedTypeArgumentsIndex => throw 'Unknown'; + int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos => + throw 'Unknown'; + int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize => + throw 'Unknown'; int get UntaggedClosure_kHasDelayedTypeArgumentsBit => throw 'Unknown'; int get UntaggedClosure_kHasInstantiatorTypeArgumentsBit => throw 'Unknown'; int get UntaggedClosure_kHasFunctionTypeArgumentsBit => throw 'Unknown'; @@ -648,6 +656,8 @@ @override int get Context_kMaxElements => 0x7ffffffffffffff; @override + int get Class_kNoTypeArguments => -1; + @override int get Function_kKindBitsPos => 0x0; @override int get Function_kKindBitsSize => 0x5; @@ -750,10 +760,20 @@ @override int get SubtypeTestCache_kMaxInputs => 0x7; @override + int get SubtypeTestCache_kMaxLinearCacheSize => 0xf8; + @override int get SubtypeTestCache_kTestResult => 0x7; @override + int get TypeArguments_kAllDynamicHash => 0x1; + @override int get TypeArguments_kMaxElements => 0x7ffffffffffffff; @override + int get UntaggedClosure_kDelayedTypeArgumentsIndex => 0x0; + @override + int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos => 0x0; + @override + int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize => 0x1; + @override int get UntaggedClosure_kHasDelayedTypeArgumentsBit => 0x0; @override int get UntaggedClosure_kHasInstantiatorTypeArgumentsBit => 0x1; @@ -1679,6 +1699,8 @@ @override int get Context_kMaxElements => 0x7ffffffffffffff; @override + int get Class_kNoTypeArguments => -1; + @override int get Function_kKindBitsPos => 0x0; @override int get Function_kKindBitsSize => 0x5; @@ -1781,10 +1803,20 @@ @override int get SubtypeTestCache_kMaxInputs => 0x7; @override + int get SubtypeTestCache_kMaxLinearCacheSize => 0xf8; + @override int get SubtypeTestCache_kTestResult => 0x7; @override + int get TypeArguments_kAllDynamicHash => 0x1; + @override int get TypeArguments_kMaxElements => 0x7ffffffffffffff; @override + int get UntaggedClosure_kDelayedTypeArgumentsIndex => 0x0; + @override + int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos => 0x0; + @override + int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize => 0x1; + @override int get UntaggedClosure_kHasDelayedTypeArgumentsBit => 0x0; @override int get UntaggedClosure_kHasInstantiatorTypeArgumentsBit => 0x1;
diff --git a/pkg/native_compiler/lib/snapshot/snapshot.dart b/pkg/native_compiler/lib/snapshot/snapshot.dart index f6df5be..d9c9591 100644 --- a/pkg/native_compiler/lib/snapshot/snapshot.dart +++ b/pkg/native_compiler/lib/snapshot/snapshot.dart
@@ -173,11 +173,6 @@ addBaseObject(RuntimeConstantObject(.uninitializedData)); addBaseObject(RuntimeConstantObject(.mutableEmptyList)); // TODO: generate these stubs instead of referencing them from the VM. - addBaseObject(StubCode.Subtype1TestCache); - addBaseObject(StubCode.Subtype2TestCache); - addBaseObject(StubCode.Subtype3TestCache); - addBaseObject(StubCode.Subtype4TestCache); - addBaseObject(StubCode.Subtype6TestCache); addBaseObject(StubCode.InstantiateTypeArguments); addBaseObject(StubCode.InitAsync); addBaseObject(StubCode.InitAsyncStar);
diff --git a/pkg/native_compiler/test/back_end/arm64/assembler_test.dart b/pkg/native_compiler/test/back_end/arm64/assembler_test.dart index 40c3e19..ed5961b 100644 --- a/pkg/native_compiler/test/back_end/arm64/assembler_test.dart +++ b/pkg/native_compiler/test/back_end/arm64/assembler_test.dart
@@ -98,6 +98,14 @@ 'stpw r1, r2, [r17, #4]\n', ); }); + test('fieldAddress', () { + asm.ldr(R1, asm.fieldAddress(R0, 42), .s32); + asm.ldr(R1, asm.fieldAddress(R0, 42), .u32); + expectDisassembly( + 'ldrsw r1, [r0, #41]\n' + 'ldrw r1, [r0, #41]\n', + ); + }); test('enterDartFrame', () { asm.enterDartFrame(); expectDisassembly( @@ -565,6 +573,68 @@ 'ldr r2, [r2, r1 uxtx scaled]\n', ); }); + test('loadIndexed', () { + asm.loadIndexed(R2, R1, R3, 0, OperandSize.s32); + asm.loadIndexed(R2, R1, R3, 42, OperandSize.s32); + asm.loadIndexed(R2, R1, R3, 4231, OperandSize.s32); + asm.loadIndexed(R2, R1, R3, 0, OperandSize.s64); + asm.loadIndexed(R2, R1, R3, 42, OperandSize.s64); + asm.loadIndexed(R2, R1, R3, 4231, OperandSize.s64); + expectDisassembly( + 'ldrsw r2, [r1, r3 uxtx scaled]\n' + 'add r2, r1, r3 lsl #2\n' + 'ldrsw r2, [r2, #42]\n' + 'add r2, r1, r3 lsl #2\n' + 'add r17, r2, #0x1000\n' + 'ldrsw r2, [r17, #135]\n' + 'ldr r2, [r1, r3 uxtx scaled]\n' + 'add r2, r1, r3 lsl #3\n' + 'ldr r2, [r2, #42]\n' + 'add r2, r1, r3 lsl #3\n' + 'add r17, r2, #0x1000\n' + 'ldr r2, [r17, #135]\n', + ); + }); + test('loadAcquire', () { + asm.loadAcquire(R2, R1, 0, OperandSize.s32); + asm.loadAcquire(R2, R1, 42, OperandSize.s32); + asm.loadAcquire(R2, R1, 4231, OperandSize.s32); + asm.loadAcquire(R2, R1, 0, OperandSize.s64); + asm.loadAcquire(R2, R1, 42, OperandSize.s64); + asm.loadAcquire(R2, R1, 4231, OperandSize.s64); + asm.loadAcquire(R2, R1, 0, OperandSize.s32, R3); + asm.loadAcquire(R2, R1, 42, OperandSize.s32, R3); + asm.loadAcquire(R2, R1, 4231, OperandSize.s32, R3); + asm.loadAcquire(R2, R1, 0, OperandSize.s64, R3); + asm.loadAcquire(R2, R1, 42, OperandSize.s64, R3); + asm.loadAcquire(R2, R1, 4231, OperandSize.s64, R3); + expectDisassembly( + 'ldarw r2, [r1]\n' + 'add r17, r1, #0x2a\n' + 'ldarw r2, [r17]\n' + 'movz r17, #0x1087\n' + 'add r17, r1, r17\n' + 'ldarw r2, [r17]\n' + 'ldar r2, [r1]\n' + 'add r17, r1, #0x2a\n' + 'ldar r2, [r17]\n' + 'movz r17, #0x1087\n' + 'add r17, r1, r17\n' + 'ldar r2, [r17]\n' + 'ldarw r2, [r1]\n' + 'add r3, r1, #0x2a\n' + 'ldarw r2, [r3]\n' + 'movz r3, #0x1087\n' + 'add r3, r1, r3\n' + 'ldarw r2, [r3]\n' + 'ldar r2, [r1]\n' + 'add r3, r1, #0x2a\n' + 'ldar r2, [r3]\n' + 'movz r3, #0x1087\n' + 'add r3, r1, r3\n' + 'ldar r2, [r3]\n', + ); + }); test('combineHashes', () { asm.combineHashes(R0, R7); expectDisassembly(
diff --git a/runtime/vm/compiler/runtime_api.cc b/runtime/vm/compiler/runtime_api.cc index d206121..71e5dc4 100644 --- a/runtime/vm/compiler/runtime_api.cc +++ b/runtime/vm/compiler/runtime_api.cc
@@ -397,8 +397,6 @@ return dart::IsTypedDataClassId(cid); } -const word Class::kNoTypeArguments = dart::Class::kNoTypeArguments; - classid_t Class::GetId(const dart::Class& handle) { return handle.id(); }
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h index 9182214..0417eb6 100644 --- a/runtime/vm/compiler/runtime_api.h +++ b/runtime/vm/compiler/runtime_api.h
@@ -431,7 +431,10 @@ }; class UntaggedClosure : public AllStatic { + static const word kInstantiatorTypeArgumentsIndexBitsPos; + static const word kInstantiatorTypeArgumentsIndexBitsSize; static const word kHasDelayedTypeArgumentsBit; + static const word kDelayedTypeArgumentsIndex; static const word kHasInstantiatorTypeArgumentsBit; static const word kHasFunctionTypeArgumentsBit; static const word kFunctionTypeArgumentsIndexBitsPos; @@ -1490,6 +1493,7 @@ static word num_inputs_offset(); static const word kMaxInputs; + static const word kMaxLinearCacheSize; static const word kTestEntryLength; static const word kInstanceCidOrSignature; static const word kDestinationType; @@ -1636,6 +1640,7 @@ static word InstanceSize(); FINAL_CLASS(); + static const word kAllDynamicHash; static const word kMaxElements; };
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h index 3406aaa..d110db3 100644 --- a/runtime/vm/compiler/runtime_offsets_extracted.h +++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -71,6 +71,7 @@ static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements = 0xfffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -154,11 +155,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -889,6 +900,7 @@ 0x7ffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -973,11 +985,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -1713,6 +1735,7 @@ static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements = 0xfffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -1796,11 +1819,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0x328; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -2530,6 +2563,7 @@ 0x7ffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -2614,11 +2648,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -3357,6 +3401,7 @@ static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements = 0xfffc; static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -3440,11 +3485,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -4180,6 +4235,7 @@ static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements = 0xfffc; static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -4263,11 +4319,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -5004,6 +5070,7 @@ static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements = 0xfffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -5087,11 +5154,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -5823,6 +5900,7 @@ 0x7ffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -5907,11 +5985,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -6645,6 +6733,7 @@ static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements = 0xfffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -6728,11 +6817,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -7455,6 +7554,7 @@ 0x7ffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -7539,11 +7639,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -8271,6 +8381,7 @@ static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements = 0xfffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -8354,11 +8465,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0x328; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -9080,6 +9201,7 @@ 0x7ffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -9164,11 +9286,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -9899,6 +10031,7 @@ static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements = 0xfffc; static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -9982,11 +10115,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -10714,6 +10857,7 @@ static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements = 0xfffc; static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -10797,11 +10941,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -11530,6 +11684,7 @@ static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements = 0xfffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -11613,11 +11768,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -12341,6 +12506,7 @@ 0x7ffd; static constexpr dart::compiler::target::word Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5; @@ -12425,11 +12591,21 @@ static constexpr dart::compiler::target::word SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash = + 0x1; static constexpr dart::compiler::target::word TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -13163,6 +13339,7 @@ 0xfffd; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -13256,11 +13433,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -14071,6 +14258,7 @@ 0x7ffd; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -14164,11 +14352,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -14990,6 +15188,7 @@ 0x7ffd; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -15083,11 +15282,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -15905,6 +16114,7 @@ 0xfffc; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -15998,11 +16208,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -16820,6 +17040,7 @@ 0xfffc; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -16913,11 +17134,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -17737,6 +17968,7 @@ 0xfffd; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -17830,11 +18062,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -18646,6 +18888,7 @@ 0x7ffd; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -18739,11 +18982,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -19557,6 +19810,7 @@ 0xfffd; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -19650,11 +19904,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -20456,6 +20720,7 @@ 0x7ffd; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -20549,11 +20814,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -21366,6 +21641,7 @@ 0x7ffd; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -21459,11 +21735,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -22272,6 +22558,7 @@ 0xfffc; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -22365,11 +22652,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -23178,6 +23475,7 @@ 0xfffc; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -23271,11 +23569,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -24086,6 +24394,7 @@ 0xfffd; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0xfffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -24179,11 +24488,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0xfffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1; @@ -24986,6 +25305,7 @@ 0x7ffd; static constexpr dart::compiler::target::word AOT_Context_kMaxElements = 0x7ffffffffffffff; +static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1; static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0; static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5; static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos = @@ -25079,11 +25399,21 @@ AOT_SubtypeTestCache_kTestEntryLength = 0x8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs = 0x7; +static constexpr dart::compiler::target::word + AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8; static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult = 0x7; +static constexpr dart::compiler::target::word + AOT_TypeArguments_kAllDynamicHash = 0x1; static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements = 0x7ffffffffffffff; static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0; +static constexpr dart::compiler::target::word + AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1; +static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0; static constexpr dart::compiler::target::word AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h index ab1bbc2..bdbe2c8 100644 --- a/runtime/vm/compiler/runtime_offsets_list.h +++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -88,6 +88,7 @@ CONSTANT(Array, kMaxElements) \ CONSTANT(Array, kMaxNewSpaceElements) \ CONSTANT(Context, kMaxElements) \ + CONSTANT(Class, kNoTypeArguments) \ CONSTANT(Function, kKindBitsPos) \ CONSTANT(Function, kKindBitsSize) \ CONSTANT(Function, kRecognizedBitsPos) \ @@ -139,8 +140,13 @@ CONSTANT(SubtypeTestCache, kInstantiatorTypeArguments) \ CONSTANT(SubtypeTestCache, kTestEntryLength) \ CONSTANT(SubtypeTestCache, kMaxInputs) \ + CONSTANT(SubtypeTestCache, kMaxLinearCacheSize) \ CONSTANT(SubtypeTestCache, kTestResult) \ + CONSTANT(TypeArguments, kAllDynamicHash) \ CONSTANT(TypeArguments, kMaxElements) \ + CONSTANT(UntaggedClosure, kDelayedTypeArgumentsIndex) \ + CONSTANT(UntaggedClosure, kInstantiatorTypeArgumentsIndexBitsPos) \ + CONSTANT(UntaggedClosure, kInstantiatorTypeArgumentsIndexBitsSize) \ CONSTANT(UntaggedClosure, kHasDelayedTypeArgumentsBit) \ CONSTANT(UntaggedClosure, kHasInstantiatorTypeArgumentsBit) \ CONSTANT(UntaggedClosure, kHasFunctionTypeArgumentsBit) \
diff --git a/runtime/vm/module_snapshot.cc b/runtime/vm/module_snapshot.cc index 33ae029..dd1ff45 100644 --- a/runtime/vm/module_snapshot.cc +++ b/runtime/vm/module_snapshot.cc
@@ -1943,11 +1943,6 @@ AddBaseObject(Object::uninitialized_index()); AddBaseObject(Object::uninitialized_data()); AddBaseObject(Object::mutable_empty_array()); - AddBaseObject(StubCode::Subtype1TestCache()); - AddBaseObject(StubCode::Subtype2TestCache()); - AddBaseObject(StubCode::Subtype3TestCache()); - AddBaseObject(StubCode::Subtype4TestCache()); - AddBaseObject(StubCode::Subtype6TestCache()); AddBaseObject(StubCode::InstantiateTypeArguments()); AddBaseObject(StubCode::InitAsync()); AddBaseObject(StubCode::InitAsyncStar());
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h index be3339b..ca5cdcb 100644 --- a/runtime/vm/raw_object.h +++ b/runtime/vm/raw_object.h
@@ -3161,6 +3161,10 @@ uint8_t, HasDelayedTypeArgumentsBit::shift(), HasDelayedTypeArgumentsBit::bitsize()>; + static constexpr intptr_t kInstantiatorTypeArgumentsIndexBitsPos = + InstantiatorTypeArgumentsIndexBits::shift(); + static constexpr intptr_t kInstantiatorTypeArgumentsIndexBitsSize = + InstantiatorTypeArgumentsIndexBits::bitsize(); using FunctionTypeArgumentsIndexBits = BitField<intptr_t, uint8_t, HasFunctionTypeArgumentsBit::kNextBit, 2>;
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc index 4493e18..969efbb 100644 --- a/runtime/vm/runtime_entry.cc +++ b/runtime/vm/runtime_entry.cc
@@ -854,7 +854,7 @@ } } -// Instantiate type. +// Assert supertype-subtype relationship. // Arg0: instantiator type arguments // Arg1: function type arguments // Arg2: type to be a subtype of the other
diff --git a/tools/VERSION b/tools/VERSION index 9a80ae2..f54cf5b 100644 --- a/tools/VERSION +++ b/tools/VERSION
@@ -27,5 +27,5 @@ MAJOR 3 MINOR 14 PATCH 0 -PRERELEASE 200 +PRERELEASE 201 PRERELEASE_PATCH 0