diff --git a/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt b/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt index 39bf88b6228..7803de7b76c 100644 --- a/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt +++ b/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt @@ -1,11 +1,11 @@ ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|3679|5|94|Const constructors can't throw exceptions. -ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|7880|5|97|Const constructors can't throw exceptions. +ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|7881|5|97|Const constructors can't throw exceptions. ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|893|5|95|Const constructors can't throw exceptions. ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|926|5|94|Const constructors can't throw exceptions. ERROR|COMPILE_TIME_ERROR|INVALID_ASSIGNMENT|lib/_internal/js_dev_runtime/private/interceptors.dart|1358|18|27|A value of type 'double' can't be assigned to a variable of type 'int'. ERROR|COMPILE_TIME_ERROR|RETURN_OF_INVALID_TYPE|lib/_internal/js_dev_runtime/private/interceptors.dart|1225|14|38|A value of type 'double' can't be returned from method '%' because it has a return type of 'JSNumber'. ERROR|COMPILE_TIME_ERROR|RETURN_OF_INVALID_TYPE|lib/_internal/js_dev_runtime/private/interceptors.dart|1227|14|38|A value of type 'double' can't be returned from method '%' because it has a return type of 'JSNumber'. ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|3677|3|5|Only redirecting factory constructors can be declared to be 'const'. -ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|7878|3|5|Only redirecting factory constructors can be declared to be 'const'. +ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|7879|3|5|Only redirecting factory constructors can be declared to be 'const'. ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|891|3|5|Only redirecting factory constructors can be declared to be 'const'. ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|924|3|5|Only redirecting factory constructors can be declared to be 'const'. diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect b/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect index 7cd9550541b..9ee095cb64b 100644 --- a/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect +++ b/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect @@ -563,28 +563,28 @@ library; // pkg/front_end/testcases/general/invalid_operator.dart:6:12: Error: The method 'Operators1.==' has fewer positional arguments than those of overridden method 'Object.=='. // operator ==() => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // // pkg/front_end/testcases/general/invalid_operator.dart:27:12: Error: The method 'Operators2.==' has more required arguments than those of overridden method 'Object.=='. // operator ==(a, b) => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // // pkg/front_end/testcases/general/invalid_operator.dart:71:12: Error: The method 'Operators4.==' has fewer positional arguments than those of overridden method 'Object.=='. // operator ==({a}) => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // // pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Declared type variables of 'Operators7.==' doesn't match those on overridden method 'Object.=='. // operator ==(a) => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // @@ -592,7 +592,7 @@ library; // Change to a subtype of 'bool'. // operator ==(a) => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect index 6e9b14049c1..1c0ff496aef 100644 --- a/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect +++ b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect @@ -563,28 +563,28 @@ library; // pkg/front_end/testcases/general/invalid_operator.dart:6:12: Error: The method 'Operators1.==' has fewer positional arguments than those of overridden method 'Object.=='. // operator ==() => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // // pkg/front_end/testcases/general/invalid_operator.dart:27:12: Error: The method 'Operators2.==' has more required arguments than those of overridden method 'Object.=='. // operator ==(a, b) => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // // pkg/front_end/testcases/general/invalid_operator.dart:71:12: Error: The method 'Operators4.==' has fewer positional arguments than those of overridden method 'Object.=='. // operator ==({a}) => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // // pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Declared type variables of 'Operators7.==' doesn't match those on overridden method 'Object.=='. // operator ==(a) => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // @@ -592,7 +592,7 @@ library; // Change to a subtype of 'bool'. // operator ==(a) => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.outline.expect index de61651c17b..0857ca05659 100644 --- a/pkg/front_end/testcases/nnbd/issue42546.dart.outline.expect +++ b/pkg/front_end/testcases/nnbd/issue42546.dart.outline.expect @@ -28,19 +28,19 @@ static method main() → dynamic Extra constant evaluation status: -Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:661:13 -> SymbolConstant(#catchError) -Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:661:13 -> ListConstant(const []) -Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:661:13 -> SymbolConstant(#test) -Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:698:13 -> SymbolConstant(#whenComplete) -Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:698:13 -> ListConstant(const []) -Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:698:13 -> InstanceConstant(const _ImmutableMap{_ImmutableMap._kvPairs: const []}) -Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:725:13 -> SymbolConstant(#timeout) -Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:725:13 -> ListConstant(const []) -Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:725:13 -> SymbolConstant(#onTimeout) -Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:622:13 -> SymbolConstant(#then) -Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:622:13 -> SymbolConstant(#onError) -Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:709:13 -> SymbolConstant(#asStream) -Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:709:13 -> ListConstant(const []) -Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:709:13 -> ListConstant(const []) -Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:709:13 -> InstanceConstant(const _ImmutableMap{_ImmutableMap._kvPairs: const []}) +Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:662:13 -> SymbolConstant(#catchError) +Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:662:13 -> ListConstant(const []) +Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:662:13 -> SymbolConstant(#test) +Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:699:13 -> SymbolConstant(#whenComplete) +Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:699:13 -> ListConstant(const []) +Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:699:13 -> InstanceConstant(const _ImmutableMap{_ImmutableMap._kvPairs: const []}) +Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:726:13 -> SymbolConstant(#timeout) +Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:726:13 -> ListConstant(const []) +Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:726:13 -> SymbolConstant(#onTimeout) +Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:623:13 -> SymbolConstant(#then) +Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:623:13 -> SymbolConstant(#onError) +Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:710:13 -> SymbolConstant(#asStream) +Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:710:13 -> ListConstant(const []) +Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:710:13 -> ListConstant(const []) +Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:710:13 -> InstanceConstant(const _ImmutableMap{_ImmutableMap._kvPairs: const []}) Extra constant evaluation: evaluated: 61, effectively constant: 15 diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect index 930703f7805..926252c1130 100644 --- a/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect +++ b/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect @@ -9,7 +9,7 @@ library /*isNonNullableByDefault*/; // pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Error: The method 'E.==' has fewer positional arguments than those of overridden method 'Object.=='. // bool operator ==() => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect index e677ee543f5..2d987aca944 100644 --- a/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect +++ b/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect @@ -9,7 +9,7 @@ library /*isNonNullableByDefault*/; // pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Error: The method 'E.==' has fewer positional arguments than those of overridden method 'Object.=='. // bool operator ==() => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect index e677ee543f5..2d987aca944 100644 --- a/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect +++ b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect @@ -9,7 +9,7 @@ library /*isNonNullableByDefault*/; // pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Error: The method 'E.==' has fewer positional arguments than those of overridden method 'Object.=='. // bool operator ==() => true; // ^ -// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('=='). +// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('=='). // bool operator ==(Object other) native "Object_equals"; // ^ // diff --git a/runtime/docs/compiler/pragmas_recognized_by_compiler.md b/runtime/docs/compiler/pragmas_recognized_by_compiler.md index 3fded63283f..8c910f8d16e 100644 --- a/runtime/docs/compiler/pragmas_recognized_by_compiler.md +++ b/runtime/docs/compiler/pragmas_recognized_by_compiler.md @@ -135,3 +135,18 @@ class C { final int value; } ``` + +### Marking recognized methods + +```dart +@pragma("vm:recognized", ) +``` + +Marks the method as one of the methods specially recognized by the VM. Here, + is one of `"asm-intrinsic"`, `"graph-intrinsic"` or `"other"`, +corresponding to the category the recognized method belongs to, as defined in +[`recognized_methods_list.h`](../../vm/compiler/recognized_methods_list.h). + +The pragmas must match exactly the set of recognized methods. This enables +kernel-level analyses and optimizations to query whether a method is recognized +by the VM. The correspondence is checked when running in debug mode. diff --git a/runtime/docs/pragmas.md b/runtime/docs/pragmas.md index ad3b987491a..3f7d23bd70e 100644 --- a/runtime/docs/pragmas.md +++ b/runtime/docs/pragmas.md @@ -17,6 +17,7 @@ These pragmas can cause unsound behavior if used incorrectly and therefore are o | Pragma | Meaning | | --- | --- | | `vm:exact-result-type` | [Declaring an exact result type of a method](compiler/pragmas_recognized_by_compiler.md#providing-an-exact-result-type) | +| `vm:recognized` | [Marking this as a recognized method](compiler/pragmas_recognized_by_compiler.md#marking-recognized-methods) | ## Pragmas for internal testing diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc index 48aae11af29..af86e1ef6be 100644 --- a/runtime/vm/compiler/frontend/kernel_to_il.cc +++ b/runtime/vm/compiler/frontend/kernel_to_il.cc @@ -741,6 +741,23 @@ FlowGraph* FlowGraphBuilder::BuildGraph() { KernelProgramInfo::Handle(script.kernel_program_info()); ASSERT(info.IsNull() || info.potential_natives() == GrowableObjectArray::null()); + + // Check that all functions that are explicitly marked as recognized with the + // vm:recognized annotation are in fact recognized. The check can't be done on + // function creation, since the recognized status isn't set until later. + if ((function.IsRecognized() != + MethodRecognizer::IsMarkedAsRecognized(function)) && + !function.IsDynamicInvocationForwarder()) { + if (function.IsRecognized()) { + FATAL1( + "Recognized method %s is not marked with the vm:recognized pragma.", + function.ToQualifiedCString()); + } else { + FATAL1( + "Non-recognized method %s is marked with the vm:recognized pragma.", + function.ToQualifiedCString()); + } + } #endif auto& kernel_data = ExternalTypedData::Handle(Z, function.KernelData()); diff --git a/runtime/vm/compiler/method_recognizer.cc b/runtime/vm/compiler/method_recognizer.cc index 2d4d7d65917..ecd99a14fa8 100644 --- a/runtime/vm/compiler/method_recognizer.cc +++ b/runtime/vm/compiler/method_recognizer.cc @@ -195,6 +195,27 @@ const char* MethodRecognizer::KindToCString(Kind kind) { return "?"; } +// Is this method marked with the vm:recognized pragma? +bool MethodRecognizer::IsMarkedAsRecognized(const Function& function, + const char* kind) { + const Function* functionp = + function.IsDynamicInvocationForwarder() + ? &Function::Handle(function.ForwardingTarget()) + : &function; + Object& options = Object::Handle(); + bool is_recognized = + Library::FindPragma(Thread::Current(), /*only_core=*/true, *functionp, + Symbols::vm_recognized(), &options); + if (!is_recognized) return false; + if (kind == nullptr) return true; + + ASSERT(options.IsString()); + ASSERT(String::Cast(options).Equals("asm-intrinsic") || + String::Cast(options).Equals("graph-intrinsic") || + String::Cast(options).Equals("other")); + return String::Cast(options).Equals(kind); +} + void MethodRecognizer::InitializeState() { GrowableArray libs(3); Libraries(&libs); diff --git a/runtime/vm/compiler/method_recognizer.h b/runtime/vm/compiler/method_recognizer.h index 949e031faf5..e9a1067659d 100644 --- a/runtime/vm/compiler/method_recognizer.h +++ b/runtime/vm/compiler/method_recognizer.h @@ -53,6 +53,8 @@ class MethodRecognizer : public AllStatic { static intptr_t MethodKindToReceiverCid(Kind kind); static const char* KindToCString(Kind kind); + static bool IsMarkedAsRecognized(const Function& function, + const char* kind = nullptr); static void InitializeState(); private: diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h index e198f853e5e..57b4bee7a17 100644 --- a/runtime/vm/compiler/recognized_methods_list.h +++ b/runtime/vm/compiler/recognized_methods_list.h @@ -12,365 +12,365 @@ namespace dart { // When adding a new function, add a 0 as the fingerprint and run the build in // debug mode to get the correct fingerprint from the mismatch error. #define OTHER_RECOGNIZED_LIST(V) \ - V(::, identical, ObjectIdentical, 0x8fd6ea58) \ - V(ClassID, getID, ClassIDgetID, 0x0401ffad) \ - V(Object, Object., ObjectConstructor, 0x256e7170) \ - V(List, ., ListFactory, 0xbec87d33) \ - V(_List, ., ObjectArrayAllocate, 0x6de199a1) \ - V(_List, []=, ObjectArraySetIndexed, 0xba15978f) \ - V(_GrowableList, []=, GrowableArraySetIndexed, 0xba15978f) \ - V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff37) \ - V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7212d) \ - V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b952) \ - V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919bc) \ - V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53af) \ - V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c49520) \ - V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6a4) \ - V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c29ffe) \ - V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f28a) \ - V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987b7) \ - V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c28) \ - V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed4e) \ - V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ad87) \ - V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0xc9e4212d) \ - V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa0c) \ - V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0xe8acb234) \ - V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651525) \ - V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10d97) \ - V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b95f) \ - V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19bea) \ - V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272645) \ - V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af137) \ - V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f7f) \ - V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf0483280) \ - V(ByteData, ., ByteDataFactory, 0x63fefa4b) \ - V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0xe51b926b) \ - V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0x3c781fb9) \ - V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0xe51b926b) \ - V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0x3c781fb9) \ - V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0xe9e9dad9) \ - V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x016014a7) \ - V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x8c3fc232) \ + V(::, identical, ObjectIdentical, 0x8fd6ea77) \ + V(ClassID, getID, ClassIDgetID, 0x0401ffcc) \ + V(Object, Object., ObjectConstructor, 0x89c467da) \ + V(List, ., ListFactory, 0xbec87d52) \ + V(_List, ., ObjectArrayAllocate, 0x6de199c0) \ + V(_List, []=, ObjectArraySetIndexed, 0xba1597ae) \ + V(_GrowableList, []=, GrowableArraySetIndexed, 0xba1597ae) \ + V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff56) \ + V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7214c) \ + V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b971) \ + V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919db) \ + V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53ce) \ + V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c4953f) \ + V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6c3) \ + V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c2a01d) \ + V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f2a9) \ + V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987d6) \ + V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c47) \ + V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed6d) \ + V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ada6) \ + V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0xc9e4214c) \ + V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa2b) \ + V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0xe8acb253) \ + V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651544) \ + V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10db6) \ + V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b97e) \ + V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19c09) \ + V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272664) \ + V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af156) \ + V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f9e) \ + V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf048329f) \ + V(ByteData, ., ByteDataFactory, 0x63fefa6a) \ + V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0xe51b928a) \ + V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0x3c781fd8) \ + V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0xe51b928a) \ + V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0x3c781fd8) \ + V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0xe9e9daf8) \ + V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x016014c6) \ + V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x8c3fc251) \ V(_Uint8ClampedArrayView, ._, TypedData_Uint8ClampedArrayView_factory, \ - 0x36da9706) \ - V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x09a366f8) \ - V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0x8f74c30f) \ - V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0x8c100d16) \ - V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x4f7f073e) \ - V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0xb85546cc) \ - V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x019c229a) \ - V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0x2290e5a1) \ - V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0xbe62c734) \ - V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x5bb7771d) \ - V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x30b9f2a2) \ - V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x96490d01) \ - V(Int8List, ., TypedData_Int8Array_factory, 0x80ad83e1) \ - V(Uint8List, ., TypedData_Uint8Array_factory, 0x252e6768) \ - V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0x1ed931ee) \ - V(Int16List, ., TypedData_Int16Array_factory, 0x7ea8630c) \ - V(Uint16List, ., TypedData_Uint16Array_factory, 0x2764f743) \ - V(Int32List, ., TypedData_Int32Array_factory, 0x54a56479) \ - V(Uint32List, ., TypedData_Uint32Array_factory, 0xac4deaa4) \ - V(Int64List, ., TypedData_Int64Array_factory, 0x02d4c748) \ - V(Uint64List, ., TypedData_Uint64Array_factory, 0x08669751) \ - V(Float32List, ., TypedData_Float32Array_factory, 0x8b65b9d7) \ - V(Float64List, ., TypedData_Float64Array_factory, 0x09ede82a) \ - V(Float32x4List, ., TypedData_Float32x4Array_factory, 0xb2a9e6e1) \ - V(Int32x4List, ., TypedData_Int32x4Array_factory, 0xa5292147) \ - V(Float64x2List, ., TypedData_Float64x2Array_factory, 0x20eafb43) \ - V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x143ed675) \ + 0x36da9725) \ + V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x09a36717) \ + V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0x8f74c32e) \ + V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0x8c100d35) \ + V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x4f7f075d) \ + V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0xb85546eb) \ + V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x019c22b9) \ + V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0x2290e5c0) \ + V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0xbe62c753) \ + V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x5bb7773c) \ + V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x30b9f2c1) \ + V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x96490d20) \ + V(Int8List, ., TypedData_Int8Array_factory, 0x80ad8400) \ + V(Uint8List, ., TypedData_Uint8Array_factory, 0x252e6787) \ + V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0x1ed9320d) \ + V(Int16List, ., TypedData_Int16Array_factory, 0x7ea8632b) \ + V(Uint16List, ., TypedData_Uint16Array_factory, 0x2764f762) \ + V(Int32List, ., TypedData_Int32Array_factory, 0x54a56498) \ + V(Uint32List, ., TypedData_Uint32Array_factory, 0xac4deac3) \ + V(Int64List, ., TypedData_Int64Array_factory, 0x02d4c767) \ + V(Uint64List, ., TypedData_Uint64Array_factory, 0x08669770) \ + V(Float32List, ., TypedData_Float32Array_factory, 0x8b65b9f6) \ + V(Float64List, ., TypedData_Float64Array_factory, 0x09ede849) \ + V(Float32x4List, ., TypedData_Float32x4Array_factory, 0xb2a9e700) \ + V(Int32x4List, ., TypedData_Int32x4Array_factory, 0xa5292166) \ + V(Float64x2List, ., TypedData_Float64x2Array_factory, 0x20eafb62) \ + V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x143ed694) \ V(::, copyRangeFromUint8ListToOneByteString, \ - CopyRangeFromUint8ListToOneByteString, 0x89d6a60a) \ - V(_StringBase, _interpolate, StringBaseInterpolate, 0xd5a58efc) \ - V(_IntegerImplementation, toDouble, IntegerToDouble, 0x5f8db5f5) \ - V(_Double, _add, DoubleAdd, 0x4326962a) \ - V(_Double, _sub, DoubleSub, 0x81077f31) \ - V(_Double, _mul, DoubleMul, 0x7858fa6f) \ - V(_Double, _div, DoubleDiv, 0x813d6a94) \ - V(::, min, MathMin, 0xe6a2f504) \ - V(::, max, MathMax, 0x4cfa6f6b) \ - V(::, _doublePow, MathDoublePow, 0x9772a8c1) \ - V(::, _intPow, MathIntPow, 0x65762a89) \ - V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x4ddbf1d0) \ - V(Float32x4, Float32x4.zero, Float32x4Zero, 0x730d827d) \ - V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x36ae87e8) \ - V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0x8704457d) \ - V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0x71ab7a48) \ - V(_Float32x4, shuffle, Float32x4Shuffle, 0x6f8cd72e) \ - V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0xd9fe42cf) \ - V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x00b7b96d) \ - V(_Float32x4, equal, Float32x4Equal, 0x77b31279) \ - V(_Float32x4, greaterThan, Float32x4GreaterThan, 0x85a5a282) \ - V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0x81c686ba) \ - V(_Float32x4, lessThan, Float32x4LessThan, 0x7d709620) \ - V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0x79cf7843) \ - V(_Float32x4, notEqual, Float32x4NotEqual, 0x97a75a46) \ - V(_Float32x4, min, Float32x4Min, 0x0ad96995) \ - V(_Float32x4, max, Float32x4Max, 0xed08eb66) \ - V(_Float32x4, scale, Float32x4Scale, 0xfdf348c5) \ - V(_Float32x4, sqrt, Float32x4Sqrt, 0x84853df5) \ - V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0x7d66357b) \ - V(_Float32x4, reciprocal, Float32x4Reciprocal, 0x73e065b5) \ - V(_Float32x4, unary-, Float32x4Negate, 0x86111def) \ - V(_Float32x4, abs, Float32x4Abs, 0x8ad4c18b) \ - V(_Float32x4, clamp, Float32x4Clamp, 0x374a9da0) \ - V(_Float32x4, _withX, Float32x4WithX, 0xfd53a072) \ - V(_Float32x4, _withY, Float32x4WithY, 0xf5f5b506) \ - V(_Float32x4, _withZ, Float32x4WithZ, 0xf2122f63) \ - V(_Float32x4, _withW, Float32x4WithW, 0xef6f231e) \ - V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0x9688f476) \ - V(Float64x2, Float64x2.zero, Float64x2Zero, 0x35f71913) \ - V(Float64x2, _Float64x2Splat, Float64x2Splat, 0xf2e6bce9) \ - V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0xa936b421) \ - V(_Float64x2, get:x, Float64x2GetX, 0xd83e5791) \ - V(_Float64x2, get:y, Float64x2GetY, 0xc5cfb2b4) \ - V(_Float64x2, unary-, Float64x2Negate, 0x48fab485) \ - V(_Float64x2, abs, Float64x2Abs, 0x4dbe5821) \ - V(_Float64x2, sqrt, Float64x2Sqrt, 0x476ed48b) \ - V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x00b7b96d) \ - V(_Float64x2, scale, Float64x2Scale, 0xc0dcdf5b) \ - V(_Float64x2, _withX, Float64x2WithX, 0xc03d3708) \ - V(_Float64x2, _withY, Float64x2WithY, 0xb8df4b9c) \ - V(_Float64x2, min, Float64x2Min, 0x6b5e1755) \ - V(_Float64x2, max, Float64x2Max, 0x4d8d9926) \ - V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0xa646ec55) \ - V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0x5e05beed) \ - V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0x7893999c) \ - V(_Int32x4, get:flagX, Int32x4GetFlagX, 0x7713cbb9) \ - V(_Int32x4, get:flagY, Int32x4GetFlagY, 0x92840299) \ - V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xa02d9dec) \ - V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xa94db02d) \ - V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x00b7b96d) \ - V(_Int32x4, shuffle, Int32x4Shuffle, 0x149a8b16) \ - V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0xd017e89f) \ - V(_Int32x4, select, Int32x4Select, 0x2847cb63) \ - V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0xa365d5a6) \ - V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0x945670e9) \ - V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0x938c5d97) \ - V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0x9ebace9b) \ - V(_HashVMBase, get:_index, LinkedHashMap_getIndex, 0xe161439b) \ - V(_HashVMBase, set:_index, LinkedHashMap_setIndex, 0x8c899997) \ - V(_HashVMBase, get:_data, LinkedHashMap_getData, 0xb1d039ec) \ - V(_HashVMBase, set:_data, LinkedHashMap_setData, 0x7c713c68) \ - V(_HashVMBase, get:_usedData, LinkedHashMap_getUsedData, 0xcb55342c) \ - V(_HashVMBase, set:_usedData, LinkedHashMap_setUsedData, 0x4b6bbba8) \ - V(_HashVMBase, get:_hashMask, LinkedHashMap_getHashMask, 0xd35b67db) \ - V(_HashVMBase, set:_hashMask, LinkedHashMap_setHashMask, 0x5371ef57) \ - V(_HashVMBase, get:_deletedKeys, LinkedHashMap_getDeletedKeys, 0xd55a64df) \ - V(_HashVMBase, set:_deletedKeys, LinkedHashMap_setDeletedKeys, 0x5570ec5b) \ - V(::, _classRangeCheck, ClassRangeCheck, 0x5ee76871) \ - V(::, _asyncStackTraceHelper, AsyncStackTraceHelper, 0x92cea920) \ - V(::, _abi, FfiAbi, 0x00a48dda) \ - V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x4ea3f661) \ - V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0xe7a60ce3) \ - V(::, _loadInt8, FfiLoadInt8, 0x7b779ed3) \ - V(::, _loadInt16, FfiLoadInt16, 0x58b6f02a) \ - V(::, _loadInt32, FfiLoadInt32, 0x5a94fec0) \ - V(::, _loadInt64, FfiLoadInt64, 0x4b627ea0) \ - V(::, _loadUint8, FfiLoadUint8, 0x4dc0dbce) \ - V(::, _loadUint16, FfiLoadUint16, 0x79491be7) \ - V(::, _loadUint32, FfiLoadUint32, 0x62e14f52) \ - V(::, _loadUint64, FfiLoadUint64, 0x7178bcc9) \ - V(::, _loadIntPtr, FfiLoadIntPtr, 0x584c733b) \ - V(::, _loadFloat, FfiLoadFloat, 0x7f0471da) \ - V(::, _loadDouble, FfiLoadDouble, 0x7d37b396) \ - V(::, _loadPointer, FfiLoadPointer, 0x3691c04d) \ - V(::, _storeInt8, FfiStoreInt8, 0x118e5bc9) \ - V(::, _storeInt16, FfiStoreInt16, 0x0a8b9fef) \ - V(::, _storeInt32, FfiStoreInt32, 0x2e23d91a) \ - V(::, _storeInt64, FfiStoreInt64, 0x2411ba37) \ - V(::, _storeUint8, FfiStoreUint8, 0x37ab7fb3) \ - V(::, _storeUint16, FfiStoreUint16, 0x153b579b) \ - V(::, _storeUint32, FfiStoreUint32, 0x18159582) \ - V(::, _storeUint64, FfiStoreUint64, 0x1516def6) \ - V(::, _storeIntPtr, FfiStoreIntPtr, 0x3a401365) \ - V(::, _storeFloat, FfiStoreFloat, 0x23292bbb) \ - V(::, _storeDouble, FfiStoreDouble, 0x013dc7a1) \ - V(::, _storePointer, FfiStorePointer, 0x43c38f62) \ - V(::, _fromAddress, FfiFromAddress, 0xab4ae553) \ - V(Pointer, get:address, FfiGetAddress, 0x012b2b9f) \ - V(::, reachabilityFence, ReachabilityFence, 0xad39d0a6) \ - V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x288d0078) \ - V(_Future, timeout, FutureTimeout, 0xdea67258) \ - V(Future, wait, FutureWait, 0x6c0c3295) \ + CopyRangeFromUint8ListToOneByteString, 0x89d6a629) \ + V(_StringBase, _interpolate, StringBaseInterpolate, 0xd5a58f1b) \ + V(_IntegerImplementation, toDouble, IntegerToDouble, 0x5f8db614) \ + V(_Double, _add, DoubleAdd, 0x43269649) \ + V(_Double, _sub, DoubleSub, 0x81077f50) \ + V(_Double, _mul, DoubleMul, 0x7858fa8e) \ + V(_Double, _div, DoubleDiv, 0x813d6ab3) \ + V(::, min, MathMin, 0xe6a2f523) \ + V(::, max, MathMax, 0x4cfa6f8a) \ + V(::, _doublePow, MathDoublePow, 0x9772a8e0) \ + V(::, _intPow, MathIntPow, 0x65762aa8) \ + V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x4ddbf1ef) \ + V(Float32x4, Float32x4.zero, Float32x4Zero, 0x730d829c) \ + V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x36ae8807) \ + V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0x8704459c) \ + V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0x71ab7a67) \ + V(_Float32x4, shuffle, Float32x4Shuffle, 0x6f8cd74d) \ + V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0xd9fe42ee) \ + V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x00b7b98c) \ + V(_Float32x4, equal, Float32x4Equal, 0x77b31298) \ + V(_Float32x4, greaterThan, Float32x4GreaterThan, 0x85a5a2a1) \ + V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0x81c686d9) \ + V(_Float32x4, lessThan, Float32x4LessThan, 0x7d70963f) \ + V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0x79cf7862) \ + V(_Float32x4, notEqual, Float32x4NotEqual, 0x97a75a65) \ + V(_Float32x4, min, Float32x4Min, 0x0ad969b4) \ + V(_Float32x4, max, Float32x4Max, 0xed08eb85) \ + V(_Float32x4, scale, Float32x4Scale, 0xfdf348e4) \ + V(_Float32x4, sqrt, Float32x4Sqrt, 0x84853e14) \ + V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0x7d66359a) \ + V(_Float32x4, reciprocal, Float32x4Reciprocal, 0x73e065d4) \ + V(_Float32x4, unary-, Float32x4Negate, 0x86111e0e) \ + V(_Float32x4, abs, Float32x4Abs, 0x8ad4c1aa) \ + V(_Float32x4, clamp, Float32x4Clamp, 0x374a9dbf) \ + V(_Float32x4, _withX, Float32x4WithX, 0xfd53a091) \ + V(_Float32x4, _withY, Float32x4WithY, 0xf5f5b525) \ + V(_Float32x4, _withZ, Float32x4WithZ, 0xf2122f82) \ + V(_Float32x4, _withW, Float32x4WithW, 0xef6f233d) \ + V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0x9688f495) \ + V(Float64x2, Float64x2.zero, Float64x2Zero, 0x35f71932) \ + V(Float64x2, _Float64x2Splat, Float64x2Splat, 0xf2e6bd08) \ + V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0xa936b440) \ + V(_Float64x2, get:x, Float64x2GetX, 0xd83e57b0) \ + V(_Float64x2, get:y, Float64x2GetY, 0xc5cfb2d3) \ + V(_Float64x2, unary-, Float64x2Negate, 0x48fab4a4) \ + V(_Float64x2, abs, Float64x2Abs, 0x4dbe5840) \ + V(_Float64x2, sqrt, Float64x2Sqrt, 0x476ed4aa) \ + V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x00b7b98c) \ + V(_Float64x2, scale, Float64x2Scale, 0xc0dcdf7a) \ + V(_Float64x2, _withX, Float64x2WithX, 0xc03d3727) \ + V(_Float64x2, _withY, Float64x2WithY, 0xb8df4bbb) \ + V(_Float64x2, min, Float64x2Min, 0x6b5e1774) \ + V(_Float64x2, max, Float64x2Max, 0x4d8d9945) \ + V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0xa646ec74) \ + V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0x5e05bf0c) \ + V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0x789399bb) \ + V(_Int32x4, get:flagX, Int32x4GetFlagX, 0x7713cbd8) \ + V(_Int32x4, get:flagY, Int32x4GetFlagY, 0x928402b8) \ + V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xa02d9e0b) \ + V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xa94db04c) \ + V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x00b7b98c) \ + V(_Int32x4, shuffle, Int32x4Shuffle, 0x149a8b35) \ + V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0xd017e8be) \ + V(_Int32x4, select, Int32x4Select, 0x2847cb82) \ + V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0xa365d5c5) \ + V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0x94567108) \ + V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0x938c5db6) \ + V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0x9ebaceba) \ + V(_HashVMBase, get:_index, LinkedHashMap_getIndex, 0xe16143ba) \ + V(_HashVMBase, set:_index, LinkedHashMap_setIndex, 0x8c8999b6) \ + V(_HashVMBase, get:_data, LinkedHashMap_getData, 0xb1d03a0b) \ + V(_HashVMBase, set:_data, LinkedHashMap_setData, 0x7c713c87) \ + V(_HashVMBase, get:_usedData, LinkedHashMap_getUsedData, 0xcb55344b) \ + V(_HashVMBase, set:_usedData, LinkedHashMap_setUsedData, 0x4b6bbbc7) \ + V(_HashVMBase, get:_hashMask, LinkedHashMap_getHashMask, 0xd35b67fa) \ + V(_HashVMBase, set:_hashMask, LinkedHashMap_setHashMask, 0x5371ef76) \ + V(_HashVMBase, get:_deletedKeys, LinkedHashMap_getDeletedKeys, 0xd55a64fe) \ + V(_HashVMBase, set:_deletedKeys, LinkedHashMap_setDeletedKeys, 0x5570ec7a) \ + V(::, _classRangeCheck, ClassRangeCheck, 0x5ee76890) \ + V(::, _asyncStackTraceHelper, AsyncStackTraceHelper, 0x92cea93f) \ + V(::, _abi, FfiAbi, 0x00a48df9) \ + V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x4ea3f680) \ + V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0xe7a60d02) \ + V(::, _loadInt8, FfiLoadInt8, 0x7b779ef2) \ + V(::, _loadInt16, FfiLoadInt16, 0x58b6f049) \ + V(::, _loadInt32, FfiLoadInt32, 0x5a94fedf) \ + V(::, _loadInt64, FfiLoadInt64, 0x4b627ebf) \ + V(::, _loadUint8, FfiLoadUint8, 0x4dc0dbed) \ + V(::, _loadUint16, FfiLoadUint16, 0x79491c06) \ + V(::, _loadUint32, FfiLoadUint32, 0x62e14f71) \ + V(::, _loadUint64, FfiLoadUint64, 0x7178bce8) \ + V(::, _loadIntPtr, FfiLoadIntPtr, 0x584c735a) \ + V(::, _loadFloat, FfiLoadFloat, 0x7f0471f9) \ + V(::, _loadDouble, FfiLoadDouble, 0x7d37b3b5) \ + V(::, _loadPointer, FfiLoadPointer, 0x3691c06c) \ + V(::, _storeInt8, FfiStoreInt8, 0x118e5be8) \ + V(::, _storeInt16, FfiStoreInt16, 0x0a8ba00e) \ + V(::, _storeInt32, FfiStoreInt32, 0x2e23d939) \ + V(::, _storeInt64, FfiStoreInt64, 0x2411ba56) \ + V(::, _storeUint8, FfiStoreUint8, 0x37ab7fd2) \ + V(::, _storeUint16, FfiStoreUint16, 0x153b57ba) \ + V(::, _storeUint32, FfiStoreUint32, 0x181595a1) \ + V(::, _storeUint64, FfiStoreUint64, 0x1516df15) \ + V(::, _storeIntPtr, FfiStoreIntPtr, 0x3a401384) \ + V(::, _storeFloat, FfiStoreFloat, 0x23292bda) \ + V(::, _storeDouble, FfiStoreDouble, 0x013dc7c0) \ + V(::, _storePointer, FfiStorePointer, 0x43c38f81) \ + V(::, _fromAddress, FfiFromAddress, 0xab4ae572) \ + V(Pointer, get:address, FfiGetAddress, 0x012b2bbe) \ + V(::, reachabilityFence, ReachabilityFence, 0xad39d0c5) \ + V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x288d0097) \ + V(_Future, timeout, FutureTimeout, 0xdea67277) \ + V(Future, wait, FutureWait, 0x6c0c32b4) \ // List of intrinsics: // (class-name, function-name, intrinsification method, fingerprint). #define CORE_LIB_INTRINSIC_LIST(V) \ - V(_Smi, ~, Smi_bitNegate, 0x068652b8) \ - V(_Smi, get:bitLength, Smi_bitLength, 0xff01b0cc) \ - V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, 0xa483e093) \ - V(_BigIntImpl, _lsh, Bigint_lsh, 0x772fb5fd) \ - V(_BigIntImpl, _rsh, Bigint_rsh, 0xb52a24b8) \ - V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x90dc61a8) \ - V(_BigIntImpl, _absSub, Bigint_absSub, 0x76887330) \ - V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0xb2741296) \ - V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0xcee0facc) \ + V(_Smi, ~, Smi_bitNegate, 0x068652d7) \ + V(_Smi, get:bitLength, Smi_bitLength, 0xff01b0eb) \ + V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, 0xa483e0b2) \ + V(_BigIntImpl, _lsh, Bigint_lsh, 0x772fb61c) \ + V(_BigIntImpl, _rsh, Bigint_rsh, 0xb52a24d7) \ + V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x90dc61c7) \ + V(_BigIntImpl, _absSub, Bigint_absSub, 0x7688734f) \ + V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0xb27412b5) \ + V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0xcee0faeb) \ V(_BigIntImpl, _estimateQuotientDigit, Bigint_estimateQuotientDigit, \ - 0x14527ed9) \ - V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x08df2795) \ - V(_Double, >, Double_greaterThan, 0xe88b6ffc) \ - V(_Double, >=, Double_greaterEqualThan, 0x1fb70bae) \ - V(_Double, <, Double_lessThan, 0xae875025) \ - V(_Double, <=, Double_lessEqualThan, 0xc87a5050) \ - V(_Double, ==, Double_equal, 0x5299f1d2) \ - V(_Double, +, Double_add, 0x783a47d4) \ - V(_Double, -, Double_sub, 0x493f1465) \ - V(_Double, *, Double_mul, 0xae0df2e2) \ - V(_Double, /, Double_div, 0xed535dde) \ - V(_Double, get:hashCode, Double_hashCode, 0xfa2d7816) \ - V(_Double, get:_identityHashCode, Double_identityHash, 0xcbf20cd4) \ - V(_Double, get:isNaN, Double_getIsNaN, 0x88fdcef4) \ - V(_Double, get:isInfinite, Double_getIsInfinite, 0x796f93b3) \ - V(_Double, get:isNegative, Double_getIsNegative, 0x88e61872) \ - V(_Double, _mulFromInteger, Double_mulFromInteger, 0xc5afaa28) \ - V(_Double, .fromInteger, DoubleFromInteger, 0x9d1ad7f6) \ - V(_GrowableList, ._withData, GrowableArray_Allocate, 0x00be5928) \ - V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x6817556e) \ - V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0x60e30834) \ - V(Object, ==, ObjectEquals, 0xbc3cad49) \ - V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c691) \ - V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xa66bfc58) \ - V(_StringBase, get:hashCode, String_getHashCode, 0xfa2d7835) \ - V(_StringBase, get:_identityHashCode, String_identityHash, 0xcbf20cf3) \ - V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0xbdfe9c92) \ - V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0xf5c3c873) \ - V(_StringBase, [], StringBaseCharAt, 0xfa3bf7be) \ - V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0xfa2d7835) \ + 0x14527ef8) \ + V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x08df27b4) \ + V(_Double, >, Double_greaterThan, 0xe88b701b) \ + V(_Double, >=, Double_greaterEqualThan, 0x1fb70bcd) \ + V(_Double, <, Double_lessThan, 0xae875044) \ + V(_Double, <=, Double_lessEqualThan, 0xc87a506f) \ + V(_Double, ==, Double_equal, 0x5299f1f1) \ + V(_Double, +, Double_add, 0x783a47f3) \ + V(_Double, -, Double_sub, 0x493f1484) \ + V(_Double, *, Double_mul, 0xae0df301) \ + V(_Double, /, Double_div, 0xed535dfd) \ + V(_Double, get:hashCode, Double_hashCode, 0xfa2d7835) \ + V(_Double, get:_identityHashCode, Double_identityHash, 0xcbf20cf3) \ + V(_Double, get:isNaN, Double_getIsNaN, 0x88fdcf13) \ + V(_Double, get:isInfinite, Double_getIsInfinite, 0x796f93d2) \ + V(_Double, get:isNegative, Double_getIsNegative, 0x88e61891) \ + V(_Double, _mulFromInteger, Double_mulFromInteger, 0xc5afaa47) \ + V(_Double, .fromInteger, DoubleFromInteger, 0x9d1ad815) \ + V(_GrowableList, ._withData, GrowableArray_Allocate, 0x00be5947) \ + V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x6817558d) \ + V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0x60e30853) \ + V(Object, ==, ObjectEquals, 0xbc3cad68) \ + V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c6b0) \ + V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xa66bfc77) \ + V(_StringBase, get:hashCode, String_getHashCode, 0xfa2d7854) \ + V(_StringBase, get:_identityHashCode, String_identityHash, 0xcbf20d12) \ + V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0xbdfe9cb1) \ + V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0xf5c3c892) \ + V(_StringBase, [], StringBaseCharAt, 0xfa3bf7dd) \ + V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0xfa2d7854) \ V(_OneByteString, _substringUncheckedNative, \ - OneByteString_substringUnchecked, 0x0d39e4a1) \ - V(_OneByteString, ==, OneByteString_equality, 0x3399ded1) \ - V(_TwoByteString, ==, TwoByteString_equality, 0x3399ded1) \ - V(_Type, get:hashCode, Type_getHashCode, 0xfa2d7835) \ - V(_Type, ==, Type_equality, 0xbc3cad0b) \ - V(::, _getHash, Object_getHash, 0x87e0c73d) \ - V(::, _setHash, Object_setHash, 0xcb4f51d2) \ + OneByteString_substringUnchecked, 0x0d39e4c0) \ + V(_OneByteString, ==, OneByteString_equality, 0x3399def0) \ + V(_TwoByteString, ==, TwoByteString_equality, 0x3399def0) \ + V(_Type, get:hashCode, Type_getHashCode, 0xfa2d7854) \ + V(_Type, ==, Type_equality, 0xbc3cad2a) \ + V(::, _getHash, Object_getHash, 0x87e0c75c) \ + V(::, _setHash, Object_setHash, 0xcb4f51f1) \ #define CORE_INTEGER_LIB_INTRINSIC_LIST(V) \ V(_IntegerImplementation, _addFromInteger, Integer_addFromInteger, \ - 0xdb88076e) \ - V(_IntegerImplementation, +, Integer_add, 0x9b2718c0) \ + 0xdb88078d) \ + V(_IntegerImplementation, +, Integer_add, 0x9b2718df) \ V(_IntegerImplementation, _subFromInteger, Integer_subFromInteger, \ - 0xa1d87562) \ - V(_IntegerImplementation, -, Integer_sub, 0x6c350eb1) \ + 0xa1d87581) \ + V(_IntegerImplementation, -, Integer_sub, 0x6c350ed0) \ V(_IntegerImplementation, _mulFromInteger, Integer_mulFromInteger, \ - 0xa93fad01) \ - V(_IntegerImplementation, *, Integer_mul, 0x4197ce8e) \ + 0xa93fad20) \ + V(_IntegerImplementation, *, Integer_mul, 0x4197cead) \ V(_IntegerImplementation, _moduloFromInteger, Integer_moduloFromInteger, \ - 0xd040918e) \ - V(_IntegerImplementation, ~/, Integer_truncDivide, 0x79adb402) \ - V(_IntegerImplementation, unary-, Integer_negate, 0xf07a7709) \ + 0xd04091ad) \ + V(_IntegerImplementation, ~/, Integer_truncDivide, 0x79adb421) \ + V(_IntegerImplementation, unary-, Integer_negate, 0xf07a7728) \ V(_IntegerImplementation, _bitAndFromInteger, Integer_bitAndFromInteger, \ - 0xcbb1b792) \ - V(_IntegerImplementation, &, Integer_bitAnd, 0x2b385f64) \ + 0xcbb1b7b1) \ + V(_IntegerImplementation, &, Integer_bitAnd, 0x2b385f83) \ V(_IntegerImplementation, _bitOrFromInteger, Integer_bitOrFromInteger, \ - 0xbd3f946a) \ - V(_IntegerImplementation, |, Integer_bitOr, 0x19dc9b1c) \ + 0xbd3f9489) \ + V(_IntegerImplementation, |, Integer_bitOr, 0x19dc9b3b) \ V(_IntegerImplementation, _bitXorFromInteger, Integer_bitXorFromInteger, \ - 0xae7f642e) \ - V(_IntegerImplementation, ^, Integer_bitXor, 0x139d6723) \ + 0xae7f644d) \ + V(_IntegerImplementation, ^, Integer_bitXor, 0x139d6742) \ V(_IntegerImplementation, _greaterThanFromInteger, \ - Integer_greaterThanFromInt, 0x47319226) \ - V(_IntegerImplementation, >, Integer_greaterThan, 0xc9d374cc) \ - V(_IntegerImplementation, ==, Integer_equal, 0xca4e7087) \ + Integer_greaterThanFromInt, 0x47319245) \ + V(_IntegerImplementation, >, Integer_greaterThan, 0xc9d374eb) \ + V(_IntegerImplementation, ==, Integer_equal, 0xca4e70a6) \ V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger, \ - 0x4d9e5fc5) \ - V(_IntegerImplementation, <, Integer_lessThan, 0xae875025) \ - V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xc87a5050) \ - V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x1fb70bae) \ - V(_IntegerImplementation, <<, Integer_shl, 0xe8da5296) \ - V(_IntegerImplementation, >>, Integer_sar, 0x4fb2013b) \ - V(_Double, toInt, DoubleToInteger, 0xebc963eb) \ + 0x4d9e5fe4) \ + V(_IntegerImplementation, <, Integer_lessThan, 0xae875044) \ + V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xc87a506f) \ + V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x1fb70bcd) \ + V(_IntegerImplementation, <<, Integer_shl, 0xe8da52b5) \ + V(_IntegerImplementation, >>, Integer_sar, 0x4fb2015a) \ + V(_Double, toInt, DoubleToInteger, 0xebc9640a) \ #define MATH_LIB_INTRINSIC_LIST(V) \ - V(::, sqrt, MathSqrt, 0x98d7cb39) \ - V(_Random, _nextState, Random_nextState, 0x2c1cf0e2) \ + V(::, sqrt, MathSqrt, 0x98d7cb58) \ + V(_Random, _nextState, Random_nextState, 0x2c1cf101) \ #define GRAPH_MATH_LIB_INTRINSIC_LIST(V) \ - V(::, sin, MathSin, 0x859e6680) \ - V(::, cos, MathCos, 0xd2dae38e) \ - V(::, tan, MathTan, 0xa23c1122) \ - V(::, asin, MathAsin, 0x1cdb139f) \ - V(::, acos, MathAcos, 0x830d84ba) \ - V(::, atan, MathAtan, 0x35d5ecd7) \ - V(::, atan2, MathAtan2, 0xb4e03ae8) \ + V(::, sin, MathSin, 0x859e669f) \ + V(::, cos, MathCos, 0xd2dae3ad) \ + V(::, tan, MathTan, 0xa23c1141) \ + V(::, asin, MathAsin, 0x1cdb13be) \ + V(::, acos, MathAcos, 0x830d84d9) \ + V(::, atan, MathAtan, 0x35d5ecf6) \ + V(::, atan2, MathAtan2, 0xb4e03b07) \ #define GRAPH_TYPED_DATA_INTRINSICS_LIST(V) \ - V(_Int8List, [], Int8ArrayGetIndexed, 0xd61e79bd) \ - V(_Int8List, []=, Int8ArraySetIndexed, 0x6e0b2e72) \ - V(_Uint8List, [], Uint8ArrayGetIndexed, 0xe1a67dfd) \ - V(_Uint8List, []=, Uint8ArraySetIndexed, 0x89499a2e) \ - V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0xe1a67dfd) \ - V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x89499a2e) \ - V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0xe1a67dfd) \ - V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0x5facb08e) \ + V(_Int8List, [], Int8ArrayGetIndexed, 0xd61e79dc) \ + V(_Int8List, []=, Int8ArraySetIndexed, 0x6e0b2e91) \ + V(_Uint8List, [], Uint8ArrayGetIndexed, 0xe1a67e1c) \ + V(_Uint8List, []=, Uint8ArraySetIndexed, 0x89499a4d) \ + V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0xe1a67e1c) \ + V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x89499a4d) \ + V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0xe1a67e1c) \ + V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0x5facb0ad) \ V(_ExternalUint8ClampedArray, [], ExternalUint8ClampedArrayGetIndexed, \ - 0xe1a67dfd) \ + 0xe1a67e1c) \ V(_ExternalUint8ClampedArray, []=, ExternalUint8ClampedArraySetIndexed, \ - 0x5facb08e) \ - V(_Int16List, [], Int16ArrayGetIndexed, 0x1726ae5d) \ - V(_Int16List, []=, Int16ArraySetIndexed, 0xde0f4d87) \ - V(_Uint16List, [], Uint16ArrayGetIndexed, 0x26c2525d) \ - V(_Uint16List, []=, Uint16ArraySetIndexed, 0x69ae5b30) \ - V(_Int32List, [], Int32ArrayGetIndexed, 0x407e58de) \ - V(_Int32List, []=, Int32ArraySetIndexed, 0x61194108) \ - V(_Uint32List, [], Uint32ArrayGetIndexed, 0xf078bf3e) \ - V(_Uint32List, []=, Uint32ArraySetIndexed, 0x70f53c88) \ - V(_Int64List, [], Int64ArrayGetIndexed, 0x7c21b69e) \ - V(_Int64List, []=, Int64ArraySetIndexed, 0xcaa7c6ca) \ - V(_Uint64List, [], Uint64ArrayGetIndexed, 0x0a7aa11e) \ - V(_Uint64List, []=, Uint64ArraySetIndexed, 0xd1374e92) \ - V(_Float64List, [], Float64ArrayGetIndexed, 0x9e4b2403) \ - V(_Float64List, []=, Float64ArraySetIndexed, 0x0a43d538) \ - V(_Float32List, [], Float32ArrayGetIndexed, 0xbdf87ee3) \ - V(_Float32List, []=, Float32ArraySetIndexed, 0x2e3e1a4a) \ - V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xa90520bc) \ - V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0xb9c7400f) \ - V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0xfbcc0e74) \ - V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x79152aaf) \ - V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xd90a31e6) \ - V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x4fd191fb) \ - V(_TypedList, get:length, TypedListLength, 0xdc9d90aa) \ - V(_TypedListView, get:length, TypedListViewLength, 0xdc9d90aa) \ - V(_ByteDataView, get:length, ByteDataViewLength, 0xdc9d90aa) \ - V(_Float32x4, get:x, Float32x4ShuffleX, 0xd83e5791) \ - V(_Float32x4, get:y, Float32x4ShuffleY, 0xc5cfb2b4) \ - V(_Float32x4, get:z, Float32x4ShuffleZ, 0xfb9b1e4a) \ - V(_Float32x4, get:w, Float32x4ShuffleW, 0xdddb62cc) \ - V(_Float32x4, *, Float32x4Mul, 0x0be25e24) \ - V(_Float32x4, /, Float32x4Div, 0xe73114a1) \ - V(_Float32x4, -, Float32x4Sub, 0x03c44de7) \ - V(_Float32x4, +, Float32x4Add, 0xde8b8376) \ - V(_Float64x2, *, Float64x2Mul, 0x6c670bc5) \ - V(_Float64x2, /, Float64x2Div, 0x47b5c261) \ - V(_Float64x2, -, Float64x2Sub, 0x6448fb88) \ - V(_Float64x2, +, Float64x2Add, 0x3f103117) \ + 0x5facb0ad) \ + V(_Int16List, [], Int16ArrayGetIndexed, 0x1726ae7c) \ + V(_Int16List, []=, Int16ArraySetIndexed, 0xde0f4da6) \ + V(_Uint16List, [], Uint16ArrayGetIndexed, 0x26c2527c) \ + V(_Uint16List, []=, Uint16ArraySetIndexed, 0x69ae5b4f) \ + V(_Int32List, [], Int32ArrayGetIndexed, 0x407e58fd) \ + V(_Int32List, []=, Int32ArraySetIndexed, 0x61194127) \ + V(_Uint32List, [], Uint32ArrayGetIndexed, 0xf078bf5d) \ + V(_Uint32List, []=, Uint32ArraySetIndexed, 0x70f53ca7) \ + V(_Int64List, [], Int64ArrayGetIndexed, 0x7c21b6bd) \ + V(_Int64List, []=, Int64ArraySetIndexed, 0xcaa7c6e9) \ + V(_Uint64List, [], Uint64ArrayGetIndexed, 0x0a7aa13d) \ + V(_Uint64List, []=, Uint64ArraySetIndexed, 0xd1374eb1) \ + V(_Float64List, [], Float64ArrayGetIndexed, 0x9e4b2422) \ + V(_Float64List, []=, Float64ArraySetIndexed, 0x0a43d557) \ + V(_Float32List, [], Float32ArrayGetIndexed, 0xbdf87f02) \ + V(_Float32List, []=, Float32ArraySetIndexed, 0x2e3e1a69) \ + V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xa90520db) \ + V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0xb9c7402e) \ + V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0xfbcc0e93) \ + V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x79152ace) \ + V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xd90a3205) \ + V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x4fd1921a) \ + V(_TypedList, get:length, TypedListLength, 0xdc9d90c9) \ + V(_TypedListView, get:length, TypedListViewLength, 0xdc9d90c9) \ + V(_ByteDataView, get:length, ByteDataViewLength, 0xdc9d90c9) \ + V(_Float32x4, get:x, Float32x4ShuffleX, 0xd83e57b0) \ + V(_Float32x4, get:y, Float32x4ShuffleY, 0xc5cfb2d3) \ + V(_Float32x4, get:z, Float32x4ShuffleZ, 0xfb9b1e69) \ + V(_Float32x4, get:w, Float32x4ShuffleW, 0xdddb62eb) \ + V(_Float32x4, *, Float32x4Mul, 0x0be25e43) \ + V(_Float32x4, /, Float32x4Div, 0xe73114c0) \ + V(_Float32x4, -, Float32x4Sub, 0x03c44e06) \ + V(_Float32x4, +, Float32x4Add, 0xde8b8395) \ + V(_Float64x2, *, Float64x2Mul, 0x6c670be4) \ + V(_Float64x2, /, Float64x2Div, 0x47b5c280) \ + V(_Float64x2, -, Float64x2Sub, 0x6448fba7) \ + V(_Float64x2, +, Float64x2Add, 0x3f103136) \ #define GRAPH_CORE_INTRINSICS_LIST(V) \ - V(_List, get:length, ObjectArrayLength, 0xdc9d90aa) \ - V(_List, [], ObjectArrayGetIndexed, 0xd159dece) \ - V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0xf5780f43) \ - V(_ImmutableList, get:length, ImmutableArrayLength, 0xdc9d90aa) \ - V(_ImmutableList, [], ImmutableArrayGetIndexed, 0xd159dece) \ - V(_GrowableList, get:length, GrowableArrayLength, 0xdc9d90aa) \ - V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x01ec3c31) \ - V(_GrowableList, _setData, GrowableArraySetData, 0x8ecf0a40) \ - V(_GrowableList, _setLength, GrowableArraySetLength, 0x63da779b) \ - V(_GrowableList, [], GrowableArrayGetIndexed, 0xd159dece) \ - V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0x012e9e24) \ - V(_StringBase, get:length, StringBaseLength, 0xdc9d90aa) \ - V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0xc4602c13) \ - V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0xc4602c13) \ + V(_List, get:length, ObjectArrayLength, 0xdc9d90c9) \ + V(_List, [], ObjectArrayGetIndexed, 0xd159deed) \ + V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0xf5780f62) \ + V(_ImmutableList, get:length, ImmutableArrayLength, 0xdc9d90c9) \ + V(_ImmutableList, [], ImmutableArrayGetIndexed, 0xd159deed) \ + V(_GrowableList, get:length, GrowableArrayLength, 0xdc9d90c9) \ + V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x01ec3c50) \ + V(_GrowableList, _setData, GrowableArraySetData, 0x8ecf0a5f) \ + V(_GrowableList, _setLength, GrowableArraySetLength, 0x63da77ba) \ + V(_GrowableList, [], GrowableArrayGetIndexed, 0xd159deed) \ + V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0x012e9e43) \ + V(_StringBase, get:length, StringBaseLength, 0xdc9d90c9) \ + V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0xc4602c32) \ + V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0xc4602c32) \ V(_ExternalOneByteString, codeUnitAt, ExternalOneByteStringCodeUnitAt, \ - 0xc4602c13) \ + 0xc4602c32) \ V(_ExternalTwoByteString, codeUnitAt, ExternalTwoByteStringCodeUnitAt, \ - 0xc4602c13) \ - V(_Double, unary-, DoubleFlipSignBit, 0xdb229448) \ - V(_Double, truncateToDouble, DoubleTruncate, 0x00e6f81b) \ - V(_Double, roundToDouble, DoubleRound, 0xf45c3bc2) \ - V(_Double, floorToDouble, DoubleFloor, 0xf2c73d0a) \ - V(_Double, ceilToDouble, DoubleCeil, 0xfd2e409b) \ - V(_Double, _modulo, DoubleMod, 0x5673c731) + 0xc4602c32) \ + V(_Double, unary-, DoubleFlipSignBit, 0xdb229467) \ + V(_Double, truncateToDouble, DoubleTruncate, 0x00e6f83a) \ + V(_Double, roundToDouble, DoubleRound, 0xf45c3be1) \ + V(_Double, floorToDouble, DoubleFloor, 0xf2c73d29) \ + V(_Double, ceilToDouble, DoubleCeil, 0xfd2e40ba) \ + V(_Double, _modulo, DoubleMod, 0x5673c750) #define GRAPH_INTRINSICS_LIST(V) \ GRAPH_CORE_INTRINSICS_LIST(V) \ @@ -378,20 +378,20 @@ namespace dart { GRAPH_MATH_LIB_INTRINSIC_LIST(V) \ #define DEVELOPER_LIB_INTRINSIC_LIST(V) \ - V(_UserTag, makeCurrent, UserTag_makeCurrent, 0x1eb344b3) \ - V(::, _getDefaultTag, UserTag_defaultTag, 0x2ef2e42c) \ - V(::, _getCurrentTag, Profiler_getCurrentTag, 0x33c3ec15) \ - V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0x7dfcaa18) \ + V(_UserTag, makeCurrent, UserTag_makeCurrent, 0x1eb344d2) \ + V(::, _getDefaultTag, UserTag_defaultTag, 0x2ef2e44b) \ + V(::, _getCurrentTag, Profiler_getCurrentTag, 0x33c3ec34) \ + V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0x7dfcaa37) \ #define ASYNC_LIB_INTRINSIC_LIST(V) \ - V(::, _clearAsyncThreadStackTrace, ClearAsyncThreadStackTrace, 0x20fecac6) \ - V(::, _setAsyncThreadStackTrace, SetAsyncThreadStackTrace, 0x39346953) \ + V(::, _clearAsyncThreadStackTrace, ClearAsyncThreadStackTrace, 0x20fecae5) \ + V(::, _setAsyncThreadStackTrace, SetAsyncThreadStackTrace, 0x39346972) \ #define INTERNAL_LIB_INTRINSIC_LIST(V) \ - V(::, allocateOneByteString, AllocateOneByteString, 0xc86bebfa) \ - V(::, allocateTwoByteString, AllocateTwoByteString, 0xd0312797) \ - V(::, writeIntoOneByteString, WriteIntoOneByteString, 0xe0d28307) \ - V(::, writeIntoTwoByteString, WriteIntoTwoByteString, 0xd82789d0) \ + V(::, allocateOneByteString, AllocateOneByteString, 0xc86bec19) \ + V(::, allocateTwoByteString, AllocateTwoByteString, 0xd03127b6) \ + V(::, writeIntoOneByteString, WriteIntoOneByteString, 0xe0d28326) \ + V(::, writeIntoTwoByteString, WriteIntoTwoByteString, 0xd82789ef) \ #define ALL_INTRINSICS_NO_INTEGER_LIB_LIST(V) \ ASYNC_LIB_INTRINSIC_LIST(V) \ @@ -411,38 +411,38 @@ namespace dart { // A list of core functions that internally dispatch based on received id. #define POLYMORPHIC_TARGET_LIST(V) \ - V(_StringBase, [], StringBaseCharAt, 0xfa3bf7be) \ - V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff37) \ - V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7212d) \ - V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b952) \ - V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919bc) \ - V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53af) \ - V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c49520) \ - V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6a4) \ - V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c29ffe) \ - V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f28a) \ - V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987b7) \ - V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c28) \ - V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed4e) \ - V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ad87) \ - V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0xc9e4212d) \ - V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa0c) \ - V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0xe8acb234) \ - V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651525) \ - V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10d97) \ - V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b95f) \ - V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19bea) \ - V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272645) \ - V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af137) \ - V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f7f) \ - V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf0483280) \ - V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c691) + V(_StringBase, [], StringBaseCharAt, 0xfa3bf7dd) \ + V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff56) \ + V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7214c) \ + V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b971) \ + V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919db) \ + V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53ce) \ + V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c4953f) \ + V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6c3) \ + V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c2a01d) \ + V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f2a9) \ + V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987d6) \ + V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c47) \ + V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed6d) \ + V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ada6) \ + V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0xc9e4214c) \ + V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa2b) \ + V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0xe8acb253) \ + V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651544) \ + V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10db6) \ + V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b97e) \ + V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19c09) \ + V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272664) \ + V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af156) \ + V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f9e) \ + V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf048329f) \ + V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c6b0) // List of recognized list factories: // (factory-name-symbol, class-name-string, constructor-name-string, // result-cid, fingerprint). #define RECOGNIZED_LIST_FACTORY_LIST(V) \ - V(_ListFactory, _List, ., kArrayCid, 0x6de199a1) \ + V(_ListFactory, _List, ., kArrayCid, 0x6de199c0) \ V(_ListFilledFactory, _List, .filled, kArrayCid, 0x871c7eb6) \ V(_ListGenerateFactory, _List, .generate, kArrayCid, 0x045b9063) \ V(_GrowableListFactory, _GrowableList, ., kGrowableObjectArrayCid, \ @@ -452,23 +452,23 @@ namespace dart { V(_GrowableListGenerateFactory, _GrowableList, .generate, \ kGrowableObjectArrayCid, 0xf6fbbee3) \ V(_GrowableListWithData, _GrowableList, ._withData, kGrowableObjectArrayCid, \ - 0x00be5928) \ - V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x80ad83e1) \ - V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0x252e6768) \ + 0x00be5947) \ + V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x80ad8400) \ + V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0x252e6787) \ V(_Uint8ClampedArrayFactory, Uint8ClampedList, ., \ - kTypedDataUint8ClampedArrayCid, 0x1ed931ee) \ - V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0x7ea8630c) \ - V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0x2764f743) \ - V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x54a56479) \ - V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0xac4deaa4) \ - V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0x02d4c748) \ - V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0x08669751) \ + kTypedDataUint8ClampedArrayCid, 0x1ed9320d) \ + V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0x7ea8632b) \ + V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0x2764f762) \ + V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x54a56498) \ + V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0xac4deac3) \ + V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0x02d4c767) \ + V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0x08669770) \ V(_Float64ArrayFactory, Float64List, ., kTypedDataFloat64ArrayCid, \ - 0x09ede82a) \ + 0x09ede849) \ V(_Float32ArrayFactory, Float32List, ., kTypedDataFloat32ArrayCid, \ - 0x8b65b9d7) \ + 0x8b65b9f6) \ V(_Float32x4ArrayFactory, Float32x4List, ., kTypedDataFloat32x4ArrayCid, \ - 0xb2a9e6e1) + 0xb2a9e700) // clang-format on diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc index ddba562f439..33955872f5d 100644 --- a/runtime/vm/object.cc +++ b/runtime/vm/object.cc @@ -2306,9 +2306,6 @@ ErrorPtr Object::Init(Isolate* isolate, // Set up the intrinsic state of all functions (core, math and typed data). compiler::Intrinsifier::InitializeState(); - // Set up recognized state of all functions (core, math and typed data). - MethodRecognizer::InitializeState(); - // Adds static const fields (class ids) to the class 'ClassID'); lib = Library::LookupLibrary(thread, Symbols::DartInternal()); ASSERT(!lib.IsNull()); @@ -2318,6 +2315,9 @@ ErrorPtr Object::Init(Isolate* isolate, ASSERT(injected); isolate->object_store()->InitKnownObjects(); + + // Set up recognized state of all functions (core, math and typed data). + MethodRecognizer::InitializeState(); #endif // !defined(DART_PRECOMPILED_RUNTIME) } else { // Object::Init version when we are running in a version of dart that has a @@ -9578,11 +9578,24 @@ void Function::SetDeoptReasonForAll(intptr_t deopt_id, } } -bool Function::CheckSourceFingerprint(int32_t fp) const { +bool Function::CheckSourceFingerprint(int32_t fp, const char* kind) const { #if !defined(DEBUG) return true; // Only check on debug. #endif +#if !defined(DART_PRECOMPILED_RUNTIME) + // Check that the function is marked as recognized via the vm:recognized + // pragma. This is so that optimizations that change the signature will know + // not to touch it. + if (kind != nullptr && !MethodRecognizer::IsMarkedAsRecognized(*this, kind)) { + OS::PrintErr( + "Recognized method %s should be marked with: " + "@pragma(\"vm:recognized\", \"%s\")\n", + ToQualifiedCString(), kind); + return false; + } +#endif + if (Isolate::Current()->obfuscate() || FLAG_precompiled_mode || (Dart::vm_snapshot_kind() != Snapshot::kNone)) { return true; // The kernel structure has been altered, skip checking. @@ -13925,22 +13938,31 @@ void Library::CheckFunctionFingerprints() { Function& func = Function::Handle(); bool fingerprints_match = true; -#define CHECK_FINGERPRINTS(class_name, function_name, dest, fp) \ +#define CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, kind) \ func = GetFunction(all_libs, #class_name, #function_name); \ if (func.IsNull()) { \ fingerprints_match = false; \ OS::PrintErr("Function not found %s.%s\n", #class_name, #function_name); \ } else { \ fingerprints_match = \ - func.CheckSourceFingerprint(fp) && fingerprints_match; \ + func.CheckSourceFingerprint(fp, kind) && fingerprints_match; \ } -#define CHECK_FINGERPRINTS2(class_name, function_name, dest, fp) \ - CHECK_FINGERPRINTS(class_name, function_name, dest, fp) +#define CHECK_FINGERPRINTS(class_name, function_name, dest, fp) \ + CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, nullptr) +#define CHECK_FINGERPRINTS_ASM_INTRINSIC(class_name, function_name, dest, fp) \ + CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, "asm-intrinsic") +#define CHECK_FINGERPRINTS_GRAPH_INTRINSIC(class_name, function_name, dest, \ + fp) \ + CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, \ + "graph-intrinsic") +#define CHECK_FINGERPRINTS_OTHER(class_name, function_name, dest, fp) \ + CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, "other") all_libs.Add(&Library::ZoneHandle(Library::CoreLibrary())); - CORE_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2); - CORE_INTEGER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2); + CORE_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC); + CORE_INTEGER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC); + GRAPH_CORE_INTRINSICS_LIST(CHECK_FINGERPRINTS_GRAPH_INTRINSIC); all_libs.Add(&Library::ZoneHandle(Library::AsyncLibrary())); all_libs.Add(&Library::ZoneHandle(Library::MathLibrary())); @@ -13949,21 +13971,26 @@ void Library::CheckFunctionFingerprints() { all_libs.Add(&Library::ZoneHandle(Library::ConvertLibrary())); all_libs.Add(&Library::ZoneHandle(Library::InternalLibrary())); all_libs.Add(&Library::ZoneHandle(Library::FfiLibrary())); - ASYNC_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2); - INTERNAL_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2); - OTHER_RECOGNIZED_LIST(CHECK_FINGERPRINTS2); + ASYNC_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC); + INTERNAL_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC); + OTHER_RECOGNIZED_LIST(CHECK_FINGERPRINTS_OTHER); POLYMORPHIC_TARGET_LIST(CHECK_FINGERPRINTS); + GRAPH_TYPED_DATA_INTRINSICS_LIST(CHECK_FINGERPRINTS_GRAPH_INTRINSIC); all_libs.Clear(); all_libs.Add(&Library::ZoneHandle(Library::DeveloperLibrary())); - DEVELOPER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2); + DEVELOPER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC); all_libs.Clear(); all_libs.Add(&Library::ZoneHandle(Library::MathLibrary())); - MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2); + MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC); + GRAPH_MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_GRAPH_INTRINSIC); +#undef CHECK_FINGERPRINTS_INNER #undef CHECK_FINGERPRINTS -#undef CHECK_FINGERPRINTS2 +#undef CHECK_FINGERPRINTS_ASM_INTRINSIC +#undef CHECK_FINGERPRINTS_GRAPH_INTRINSIC +#undef CHECK_FINGERPRINTS_OTHER #define CHECK_FACTORY_FINGERPRINTS(symbol, class_name, factory_name, cid, fp) \ func = GetFunction(all_libs, #class_name, #factory_name); \ diff --git a/runtime/vm/object.h b/runtime/vm/object.h index 988de23e7e9..11fed21a42d 100644 --- a/runtime/vm/object.h +++ b/runtime/vm/object.h @@ -3584,7 +3584,7 @@ class Function : public Object { int32_t SourceFingerprint() const; // Return false and report an error if the fingerprint does not match. - bool CheckSourceFingerprint(int32_t fp) const; + bool CheckSourceFingerprint(int32_t fp, const char* kind = nullptr) const; // Works with map [deopt-id] -> ICData. void SaveICDataMap( diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h index bcb4057fe82..443daa2bf1a 100644 --- a/runtime/vm/symbols.h +++ b/runtime/vm/symbols.h @@ -494,6 +494,7 @@ class ObjectPointerVisitor; V(vm_inferred_type_metadata, "vm.inferred-type.metadata") \ V(vm_never_inline, "vm:never-inline") \ V(vm_non_nullable_result_type, "vm:non-nullable-result-type") \ + V(vm_recognized, "vm:recognized") \ V(vm_trace_entrypoints, "vm:testing.unsafe.trace-entrypoints-fn") \ V(vm_procedure_attributes_metadata, "vm.procedure-attributes.metadata") diff --git a/sdk/lib/_internal/vm/lib/array.dart b/sdk/lib/_internal/vm/lib/array.dart index d615f7b9404..1e2f9c027df 100644 --- a/sdk/lib/_internal/vm/lib/array.dart +++ b/sdk/lib/_internal/vm/lib/array.dart @@ -6,6 +6,7 @@ @pragma("vm:entry-point") class _List extends FixedLengthListBase { + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", [_List, "result-type-uses-passed-type-arguments"]) @pragma("vm:prefer-inline") @@ -34,14 +35,18 @@ class _List extends FixedLengthListBase { return result; } + @pragma("vm:recognized", "graph-intrinsic") E operator [](int index) native "List_getIndexed"; + @pragma("vm:recognized", "other") void operator []=(int index, E value) { _setIndexed(index, value); } + @pragma("vm:recognized", "graph-intrinsic") void _setIndexed(int index, E value) native "List_setIndexed"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get length native "List_getLength"; @@ -188,8 +193,10 @@ class _ImmutableList extends UnmodifiableListBase { factory _ImmutableList._from(List from, int offset, int length) native "ImmutableList_from"; + @pragma("vm:recognized", "graph-intrinsic") E operator [](int index) native "List_getIndexed"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get length native "List_getLength"; diff --git a/sdk/lib/_internal/vm/lib/array_patch.dart b/sdk/lib/_internal/vm/lib/array_patch.dart index ef181bee908..51fe2887aea 100644 --- a/sdk/lib/_internal/vm/lib/array_patch.dart +++ b/sdk/lib/_internal/vm/lib/array_patch.dart @@ -12,6 +12,7 @@ class List { } @patch + @pragma("vm:recognized", "other") factory List([int? length]) native "List_new"; @patch diff --git a/sdk/lib/_internal/vm/lib/async_patch.dart b/sdk/lib/_internal/vm/lib/async_patch.dart index 659f31f53c6..8659e793b7f 100644 --- a/sdk/lib/_internal/vm/lib/async_patch.dart +++ b/sdk/lib/_internal/vm/lib/async_patch.dart @@ -270,16 +270,19 @@ void _completeOnAsyncError( // // This method is recognized. It performs a runtime call if // FLAG_causal_async_stacks is enabled or returns `null` otherwise. +@pragma("vm:recognized", "other") @pragma("vm:prefer-inline") Object _asyncStackTraceHelper(Function async_op) native "StackTrace_asyncStackTraceHelper"; // This method is asm intrinsified. +@pragma("vm:recognized", "asm-intrinsic") @pragma("vm:entry-point", "call") void _clearAsyncThreadStackTrace() native "StackTrace_clearAsyncThreadStackTrace"; // This method is asm intrinsified. +@pragma("vm:recognized", "asm-intrinsic") @pragma("vm:entry-point", "call") void _setAsyncThreadStackTrace(StackTrace stackTrace) native "StackTrace_setAsyncThreadStackTrace"; diff --git a/sdk/lib/_internal/vm/lib/bigint_patch.dart b/sdk/lib/_internal/vm/lib/bigint_patch.dart index 5cc0befd8ee..dd627df2672 100644 --- a/sdk/lib/_internal/vm/lib/bigint_patch.dart +++ b/sdk/lib/_internal/vm/lib/bigint_patch.dart @@ -559,6 +559,7 @@ class _BigIntImpl implements BigInt { /// Does *not* clear digits below ds. /// /// Note: This function may be intrinsified. + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:never-inline") static void _lsh( Uint32List xDigits, int xUsed, int n, Uint32List resultDigits) { @@ -635,6 +636,7 @@ class _BigIntImpl implements BigInt { /// resultDigits[0..resultUsed-1] = xDigits[0..xUsed-1] >> n. /// /// Note: This function may be intrinsified. + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:never-inline") static void _rsh( Uint32List xDigits, int xUsed, int n, Uint32List resultDigits) { @@ -763,6 +765,7 @@ class _BigIntImpl implements BigInt { /// used >= otherUsed > 0. /// /// Note: This function may be intrinsified. + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:never-inline") static void _absAdd(Uint32List digits, int used, Uint32List otherDigits, int otherUsed, Uint32List resultDigits) { @@ -785,6 +788,7 @@ class _BigIntImpl implements BigInt { /// used >= otherUsed > 0. /// /// Note: This function may be intrinsified. + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:never-inline") static void _absSub(Uint32List digits, int used, Uint32List otherDigits, int otherUsed, Uint32List resultDigits) { @@ -1114,6 +1118,7 @@ class _BigIntImpl implements BigInt { /// /// Note: This function may be intrinsified. Intrinsics on 64-bit platforms /// process digit pairs at even indices and returns 2. + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:never-inline") static int _mulAdd( @@ -1166,6 +1171,7 @@ class _BigIntImpl implements BigInt { /// /// Note: This function may be intrinsified. Intrinsics on 64-bit platforms /// process digit pairs at even indices and returns 2. + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:never-inline") static int _sqrAdd( @@ -1288,6 +1294,7 @@ class _BigIntImpl implements BigInt { /// Estimate `args[_quotientDigit.._quotientHighDigit] = digits[i-3..i] ~/ /// args[_divisorLowTopDigit.._divisorTopDigit]`. /// Returns 2. + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:never-inline") static int _estimateQuotientDigit(Uint32List args, Uint32List digits, int i) { @@ -2642,6 +2649,7 @@ class _BigIntMontgomeryReduction implements _BigIntReduction { // args[_muDigit.._muHighDigit] = // args[_rhoDigit.._rhoHighDigit] * digits[i..i+1] mod _digitBase^2. // Returns 2. + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:never-inline") static int _mulMod(Uint32List args, Uint32List digits, int i) { diff --git a/sdk/lib/_internal/vm/lib/class_id_fasta.dart b/sdk/lib/_internal/vm/lib/class_id_fasta.dart index c81bd60f69a..10280839575 100644 --- a/sdk/lib/_internal/vm/lib/class_id_fasta.dart +++ b/sdk/lib/_internal/vm/lib/class_id_fasta.dart @@ -6,6 +6,7 @@ @pragma("vm:entry-point") class ClassID { + @pragma("vm:recognized", "other") @pragma("vm:entry-point", "call") @pragma("vm:exact-result-type", "dart:core#_Smi") static int getID(Object value) native "ClassID_getID"; diff --git a/sdk/lib/_internal/vm/lib/compact_hash.dart b/sdk/lib/_internal/vm/lib/compact_hash.dart index 67ba9b2f202..db903e4c3e6 100644 --- a/sdk/lib/_internal/vm/lib/compact_hash.dart +++ b/sdk/lib/_internal/vm/lib/compact_hash.dart @@ -46,33 +46,43 @@ abstract class _HashFieldBase { // Base class for VM-internal classes; keep in sync with _HashFieldBase. abstract class _HashVMBase { + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:typed_data#_Uint32List") @pragma("vm:prefer-inline") Uint32List get _index native "LinkedHashMap_getIndex"; + @pragma("vm:recognized", "other") @pragma("vm:prefer-inline") void set _index(Uint32List value) native "LinkedHashMap_setIndex"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get _hashMask native "LinkedHashMap_getHashMask"; + @pragma("vm:recognized", "other") @pragma("vm:prefer-inline") void set _hashMask(int value) native "LinkedHashMap_setHashMask"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_List") @pragma("vm:prefer-inline") List get _data native "LinkedHashMap_getData"; + @pragma("vm:recognized", "other") @pragma("vm:prefer-inline") void set _data(List value) native "LinkedHashMap_setData"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get _usedData native "LinkedHashMap_getUsedData"; + @pragma("vm:recognized", "other") @pragma("vm:prefer-inline") void set _usedData(int value) native "LinkedHashMap_setUsedData"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get _deletedKeys native "LinkedHashMap_getDeletedKeys"; + @pragma("vm:recognized", "other") @pragma("vm:prefer-inline") void set _deletedKeys(int value) native "LinkedHashMap_setDeletedKeys"; } diff --git a/sdk/lib/_internal/vm/lib/convert_patch.dart b/sdk/lib/_internal/vm/lib/convert_patch.dart index 6f823376fb8..851c5543145 100644 --- a/sdk/lib/_internal/vm/lib/convert_patch.dart +++ b/sdk/lib/_internal/vm/lib/convert_patch.dart @@ -1700,7 +1700,7 @@ class _Utf8Decoder { return size; } - // This method is recognized by the VM and compiled into specialized code. + @pragma("vm:recognized", "other") @pragma("vm:prefer-inline") int _scan(Uint8List bytes, int start, int end, String scanTable) { int size = 0; diff --git a/sdk/lib/_internal/vm/lib/double.dart b/sdk/lib/_internal/vm/lib/double.dart index 83b32623c45..7500050660d 100644 --- a/sdk/lib/_internal/vm/lib/double.dart +++ b/sdk/lib/_internal/vm/lib/double.dart @@ -6,36 +6,45 @@ @pragma("vm:entry-point") class _Double implements double { + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", _Double) factory _Double.fromInteger(int value) native "Double_doubleFromInteger"; + @pragma("vm:recognized", "asm-intrinsic") int get hashCode native "Double_hashCode"; + @pragma("vm:recognized", "asm-intrinsic") int get _identityHashCode native "Double_hashCode"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", _Double) @pragma("vm:never-inline") double operator +(num other) { return _add(other.toDouble()); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Double) double _add(double other) native "Double_add"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", _Double) @pragma("vm:never-inline") double operator -(num other) { return _sub(other.toDouble()); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Double) double _sub(double other) native "Double_sub"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", _Double) @pragma("vm:never-inline") double operator *(num other) { return _mul(other.toDouble()); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Double) double _mul(double other) native "Double_mul"; @@ -46,12 +55,14 @@ class _Double implements double { @pragma("vm:non-nullable-result-type") int _trunc_div(double other) native "Double_trunc_div"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", _Double) @pragma("vm:never-inline") double operator /(num other) { return _div(other.toDouble()); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Double) double _div(double other) native "Double_div"; @@ -59,6 +70,7 @@ class _Double implements double { return _modulo(other.toDouble()); } + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Double) double _modulo(double other) native "Double_modulo"; @@ -68,9 +80,11 @@ class _Double implements double { double _remainder(double other) native "Double_remainder"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Double) double operator -() native "Double_flipSignBit"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) @pragma("vm:never-inline") bool operator ==(Object other) { @@ -82,12 +96,14 @@ class _Double implements double { @pragma("vm:exact-result-type", bool) bool _equalToInteger(int other) native "Double_equalToInteger"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) @pragma("vm:never-inline") bool operator <(num other) { return other > this; } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) @pragma("vm:never-inline") bool operator >(num other) { @@ -97,12 +113,14 @@ class _Double implements double { @pragma("vm:exact-result-type", bool) bool _greaterThan(double other) native "Double_greaterThan"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) @pragma("vm:never-inline") bool operator >=(num other) { return (this == other) || (this > other); } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) @pragma("vm:never-inline") bool operator <=(num other) { @@ -117,6 +135,7 @@ class _Double implements double { return new _Double.fromInteger(other)._sub(this); } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") double _mulFromInteger(int other) { return new _Double.fromInteger(other)._mul(this); @@ -137,10 +156,13 @@ class _Double implements double { bool _greaterThanFromInteger(int other) native "Double_greaterThanFromInteger"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) bool get isNegative native "Double_getIsNegative"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) bool get isInfinite native "Double_getIsInfinite"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) bool get isNaN native "Double_getIsNaN"; bool get isFinite => !isInfinite && !isNaN; // Can be optimized. @@ -162,12 +184,16 @@ class _Double implements double { int ceil() => ceilToDouble().toInt(); int truncate() => truncateToDouble().toInt(); + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Double) double roundToDouble() native "Double_round"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Double) double floorToDouble() native "Double_floor"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Double) double ceilToDouble() native "Double_ceil"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Double) double truncateToDouble() native "Double_truncate"; @@ -188,6 +214,7 @@ class _Double implements double { return this; } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") int toInt() native "Double_toInt"; diff --git a/sdk/lib/_internal/vm/lib/ffi_patch.dart b/sdk/lib/_internal/vm/lib/ffi_patch.dart index 02bc8c7b2a5..79fc3a3d581 100644 --- a/sdk/lib/_internal/vm/lib/ffi_patch.dart +++ b/sdk/lib/_internal/vm/lib/ffi_patch.dart @@ -39,12 +39,13 @@ int sizeOf() { int _sizeOf() native "Ffi_sizeOf"; -// Implemented in the method recognizer. +@pragma("vm:recognized", "other") Pointer _fromAddress(int ptr) native "Ffi_fromAddress"; // The real implementation of this function (for interface calls) lives in // BuildFfiAsFunctionCall in the Kernel frontend. No calls can actually reach // this function. +@pragma("vm:recognized", "other") DS _asFunctionInternal( Pointer> ptr) native "Ffi_asFunctionInternal"; @@ -67,6 +68,7 @@ dynamic _asExternalTypedData(Pointer ptr, int count) // // Function objects returned by this native method are not Dart instances, // so we need to use top type as a return type to avoid type check. +@pragma("vm:recognized", "other") dynamic _nativeCallbackFunction(Function target, Object? exceptionalReturn) native "Ffi_nativeCallbackFunction"; @@ -92,8 +94,8 @@ class Pointer { "Pointer.fromFunction cannot be called dynamically."); } - // Implemented in the method recognizer. @patch + @pragma("vm:recognized", "other") int get address native "Ffi_address"; // For statically known types, this is rewired. @@ -112,6 +114,7 @@ class Pointer { /// Returns an integer encoding the ABI used for size and alignment /// calculations. See pkg/vm/lib/transformations/ffi.dart. +@pragma("vm:recognized", "other") @pragma('vm:prefer-inline') int _abi() native "Recognized method: IR graph is built in the flow graph builder."; @@ -122,67 +125,91 @@ int _abi() // allocating a Pointer with in elementAt/offsetBy. Allocating these pointers // and GCing new spaces takes a lot of the benchmark time. The next speedup is // getting rid of these allocations by inlining these functions. +@pragma("vm:recognized", "other") int _loadInt8(Pointer pointer, int offsetInBytes) native "Ffi_loadInt8"; +@pragma("vm:recognized", "other") int _loadInt16(Pointer pointer, int offsetInBytes) native "Ffi_loadInt16"; +@pragma("vm:recognized", "other") int _loadInt32(Pointer pointer, int offsetInBytes) native "Ffi_loadInt32"; +@pragma("vm:recognized", "other") int _loadInt64(Pointer pointer, int offsetInBytes) native "Ffi_loadInt64"; +@pragma("vm:recognized", "other") int _loadUint8(Pointer pointer, int offsetInBytes) native "Ffi_loadUint8"; +@pragma("vm:recognized", "other") int _loadUint16(Pointer pointer, int offsetInBytes) native "Ffi_loadUint16"; +@pragma("vm:recognized", "other") int _loadUint32(Pointer pointer, int offsetInBytes) native "Ffi_loadUint32"; +@pragma("vm:recognized", "other") int _loadUint64(Pointer pointer, int offsetInBytes) native "Ffi_loadUint64"; +@pragma("vm:recognized", "other") int _loadIntPtr(Pointer pointer, int offsetInBytes) native "Ffi_loadIntPtr"; +@pragma("vm:recognized", "other") double _loadFloat(Pointer pointer, int offsetInBytes) native "Ffi_loadFloat"; +@pragma("vm:recognized", "other") double _loadDouble(Pointer pointer, int offsetInBytes) native "Ffi_loadDouble"; +@pragma("vm:recognized", "other") Pointer _loadPointer( Pointer pointer, int offsetInBytes) native "Ffi_loadPointer"; S _loadStruct(Pointer pointer, int index) native "Ffi_loadStruct"; +@pragma("vm:recognized", "other") void _storeInt8(Pointer pointer, int offsetInBytes, int value) native "Ffi_storeInt8"; +@pragma("vm:recognized", "other") void _storeInt16(Pointer pointer, int offsetInBytes, int value) native "Ffi_storeInt16"; +@pragma("vm:recognized", "other") void _storeInt32(Pointer pointer, int offsetInBytes, int value) native "Ffi_storeInt32"; +@pragma("vm:recognized", "other") void _storeInt64(Pointer pointer, int offsetInBytes, int value) native "Ffi_storeInt64"; +@pragma("vm:recognized", "other") void _storeUint8(Pointer pointer, int offsetInBytes, int value) native "Ffi_storeUint8"; +@pragma("vm:recognized", "other") void _storeUint16(Pointer pointer, int offsetInBytes, int value) native "Ffi_storeUint16"; +@pragma("vm:recognized", "other") void _storeUint32(Pointer pointer, int offsetInBytes, int value) native "Ffi_storeUint32"; +@pragma("vm:recognized", "other") void _storeUint64(Pointer pointer, int offsetInBytes, int value) native "Ffi_storeUint64"; +@pragma("vm:recognized", "other") void _storeIntPtr(Pointer pointer, int offsetInBytes, int value) native "Ffi_storeIntPtr"; +@pragma("vm:recognized", "other") void _storeFloat(Pointer pointer, int offsetInBytes, double value) native "Ffi_storeFloat"; +@pragma("vm:recognized", "other") void _storeDouble(Pointer pointer, int offsetInBytes, double value) native "Ffi_storeDouble"; +@pragma("vm:recognized", "other") void _storePointer(Pointer pointer, int offsetInBytes, Pointer value) native "Ffi_storePointer"; diff --git a/sdk/lib/_internal/vm/lib/growable_array.dart b/sdk/lib/_internal/vm/lib/growable_array.dart index 0e63557121c..62b81967e49 100644 --- a/sdk/lib/_internal/vm/lib/growable_array.dart +++ b/sdk/lib/_internal/vm/lib/growable_array.dart @@ -130,14 +130,17 @@ class _GrowableList extends ListBase { return result; } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", [_GrowableList, "result-type-uses-passed-type-arguments"]) factory _GrowableList._withData(_List data) native "GrowableList_allocate"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get _capacity native "GrowableList_getCapacity"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get length native "GrowableList_getLength"; @@ -170,16 +173,21 @@ class _GrowableList extends ListBase { _setLength(new_length); } + @pragma("vm:recognized", "graph-intrinsic") void _setLength(int new_length) native "GrowableList_setLength"; + @pragma("vm:recognized", "graph-intrinsic") void _setData(_List array) native "GrowableList_setData"; + @pragma("vm:recognized", "graph-intrinsic") T operator [](int index) native "GrowableList_getIndexed"; + @pragma("vm:recognized", "other") void operator []=(int index, T value) { _setIndexed(index, value); } + @pragma("vm:recognized", "graph-intrinsic") void _setIndexed(int index, T? value) native "GrowableList_setIndexed"; @pragma("vm:entry-point", "call") diff --git a/sdk/lib/_internal/vm/lib/identical_patch.dart b/sdk/lib/_internal/vm/lib/identical_patch.dart index 4b5743084c7..9a9ff566f37 100644 --- a/sdk/lib/_internal/vm/lib/identical_patch.dart +++ b/sdk/lib/_internal/vm/lib/identical_patch.dart @@ -5,6 +5,7 @@ // part of "core_patch.dart"; @patch +@pragma("vm:recognized", "other") @pragma("vm:exact-result-type", bool) bool identical(Object? a, Object? b) native "Identical_comparison"; diff --git a/sdk/lib/_internal/vm/lib/integers.dart b/sdk/lib/_internal/vm/lib/integers.dart index 9fd3a76d013..3ce3af5126d 100644 --- a/sdk/lib/_internal/vm/lib/integers.dart +++ b/sdk/lib/_internal/vm/lib/integers.dart @@ -5,16 +5,20 @@ // part of "core_patch.dart"; abstract class _IntegerImplementation implements int { + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") @pragma("vm:never-inline") num operator +(num other) => other._addFromInteger(this); + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") @pragma("vm:never-inline") num operator -(num other) => other._subFromInteger(this); + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") @pragma("vm:never-inline") num operator *(num other) => other._mulFromInteger(this); + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") @pragma("vm:never-inline") int operator ~/(num other) { @@ -36,6 +40,7 @@ abstract class _IntegerImplementation implements int { return other._moduloFromInteger(this); } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") @pragma("vm:never-inline") int operator -() { @@ -44,12 +49,15 @@ abstract class _IntegerImplementation implements int { return unsafeCast(0 - this); } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") @pragma("vm:never-inline") int operator &(int other) => other._bitAndFromInteger(this); + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") @pragma("vm:never-inline") int operator |(int other) => other._bitOrFromInteger(this); + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") @pragma("vm:never-inline") int operator ^(int other) => other._bitXorFromInteger(this); @@ -60,24 +68,31 @@ abstract class _IntegerImplementation implements int { @pragma("vm:non-nullable-result-type") int _bitAndFromSmi(_Smi other) native "Integer_bitAndFromInteger"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") int _bitAndFromInteger(int other) native "Integer_bitAndFromInteger"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") int _bitOrFromInteger(int other) native "Integer_bitOrFromInteger"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") int _bitXorFromInteger(int other) native "Integer_bitXorFromInteger"; @pragma("vm:non-nullable-result-type") int _shrFromInteger(int other) native "Integer_shrFromInteger"; @pragma("vm:non-nullable-result-type") int _shlFromInteger(int other) native "Integer_shlFromInteger"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") int _addFromInteger(int other) native "Integer_addFromInteger"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") int _subFromInteger(int other) native "Integer_subFromInteger"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") int _mulFromInteger(int other) native "Integer_mulFromInteger"; @pragma("vm:non-nullable-result-type") int _truncDivFromInteger(int other) native "Integer_truncDivFromInteger"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") int _moduloFromInteger(int other) native "Integer_moduloFromInteger"; int _remainderFromInteger(int other) { @@ -86,41 +101,49 @@ abstract class _IntegerImplementation implements int { return unsafeCast(other - (other ~/ this) * this); } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") @pragma("vm:never-inline") int operator >>(int other) => other._shrFromInteger(this); + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:non-nullable-result-type") @pragma("vm:never-inline") int operator <<(int other) => other._shlFromInteger(this); + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) @pragma("vm:never-inline") bool operator <(num other) { return other > this; } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) @pragma("vm:never-inline") bool operator >(num other) { return other._greaterThanFromInteger(this); } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) @pragma("vm:never-inline") bool operator >=(num other) { return (this == other) || (this > other); } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) @pragma("vm:never-inline") bool operator <=(num other) { return (this == other) || (this < other); } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) bool _greaterThanFromInteger(int other) native "Integer_greaterThanFromInteger"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) @pragma("vm:never-inline") bool operator ==(Object other) { @@ -130,6 +153,7 @@ abstract class _IntegerImplementation implements int { return false; } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) bool _equalToInteger(int other) native "Integer_equalToInteger"; int abs() { @@ -137,7 +161,11 @@ abstract class _IntegerImplementation implements int { } int get sign { - return (this > 0) ? 1 : (this < 0) ? -1 : 0; + return (this > 0) + ? 1 + : (this < 0) + ? -1 + : 0; } bool get isEven => ((this & 1) == 0); @@ -268,6 +296,7 @@ abstract class _IntegerImplementation implements int { return this; } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Double) double toDouble() { return new _Double.fromInteger(this); @@ -515,13 +544,16 @@ class _Smi extends _IntegerImplementation { int get hashCode => this; int get _identityHashCode => this; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int operator ~() native "Smi_bitNegate"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int get bitLength native "Smi_bitLength"; int operator &(int other) => other._bitAndFromSmi(this); + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int _bitAndFromSmi(_Smi other) native "Smi_bitAndFromSmi"; diff --git a/sdk/lib/_internal/vm/lib/internal_patch.dart b/sdk/lib/_internal/vm/lib/internal_patch.dart index ad5f5b799aa..c30344268e2 100644 --- a/sdk/lib/_internal/vm/lib/internal_patch.dart +++ b/sdk/lib/_internal/vm/lib/internal_patch.dart @@ -36,19 +36,21 @@ Object? extractTypeArguments(T instance, Function extract) native "Internal_extractTypeArguments"; /// The returned string is a [_OneByteString] with uninitialized content. +@pragma("vm:recognized", "asm-intrinsic") @pragma("vm:entry-point", "call") String allocateOneByteString(int length) native "Internal_allocateOneByteString"; /// The [string] must be a [_OneByteString]. The [index] must be valid. +@pragma("vm:recognized", "asm-intrinsic") @pragma("vm:entry-point", "call") void writeIntoOneByteString(String string, int index, int codePoint) native "Internal_writeIntoOneByteString"; -/// This function is recognized by the VM and compiled into specialized code. /// It is assumed that [from] is a native [Uint8List] class and [to] is a /// [_OneByteString]. The [fromStart] and [toStart] indices together with the /// [length] must specify ranges within the bounds of the list / string. +@pragma("vm:recognized", "other") @pragma("vm:prefer-inline") void copyRangeFromUint8ListToOneByteString( Uint8List from, String to, int fromStart, int toStart, int length) { @@ -58,11 +60,13 @@ void copyRangeFromUint8ListToOneByteString( } /// The returned string is a [_TwoByteString] with uninitialized content. +@pragma("vm:recognized", "asm-intrinsic") @pragma("vm:entry-point", "call") String allocateTwoByteString(int length) native "Internal_allocateTwoByteString"; /// The [string] must be a [_TwoByteString]. The [index] must be valid. +@pragma("vm:recognized", "asm-intrinsic") @pragma("vm:entry-point", "call") void writeIntoTwoByteString(String string, int index, int codePoint) native "Internal_writeIntoTwoByteString"; @@ -106,6 +110,7 @@ final bool is64Bit = _inquireIs64Bit(); bool _inquireIs64Bit() native "Internal_inquireIs64Bit"; +@pragma("vm:recognized", "other") @pragma("vm:entry-point", "call") @pragma("vm:exact-result-type", bool) @pragma("vm:prefer-inline") @@ -163,7 +168,7 @@ T unsafeCast(Object? v) native "Internal_unsafeCast"; // This function can be used to keep an object alive til that point. // -// This is implemented by a recognized method. +@pragma("vm:recognized", "other") @pragma('vm:prefer-inline') void reachabilityFence(Object object) native "Internal_reachabilityFence"; diff --git a/sdk/lib/_internal/vm/lib/math_patch.dart b/sdk/lib/_internal/vm/lib/math_patch.dart index b41daad7009..0e384ca9096 100644 --- a/sdk/lib/_internal/vm/lib/math_patch.dart +++ b/sdk/lib/_internal/vm/lib/math_patch.dart @@ -14,6 +14,7 @@ import "dart:typed_data" show Uint32List; /// There are no parts of this patch library. @patch +@pragma("vm:recognized", "other") @pragma("vm:prefer-inline") T min(T a, T b) { if (a > b) return b; @@ -38,6 +39,7 @@ T min(T a, T b) { } @patch +@pragma("vm:recognized", "other") @pragma("vm:prefer-inline") T max(T a, T b) { if (a > b) return a; @@ -74,6 +76,7 @@ num pow(num x, num exponent) { return _doublePow(x.toDouble(), exponent.toDouble()); } +@pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Double") double _doublePow(double base, double exponent) { if (exponent == 0.0) { @@ -100,6 +103,7 @@ double _doublePow(double base, double exponent) { double _pow(double base, double exponent) native "Math_doublePow"; +@pragma("vm:recognized", "other") int _intPow(int base, int exponent) { // Exponentiation by squaring. int result = 1; @@ -117,34 +121,42 @@ int _intPow(int base, int exponent) { } @patch +@pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") @pragma("vm:never-inline") double atan2(num a, num b) => _atan2(a.toDouble(), b.toDouble()); @patch +@pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") @pragma("vm:never-inline") double sin(num radians) => _sin(radians.toDouble()); @patch +@pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") @pragma("vm:never-inline") double cos(num radians) => _cos(radians.toDouble()); @patch +@pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") @pragma("vm:never-inline") double tan(num radians) => _tan(radians.toDouble()); @patch +@pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") @pragma("vm:never-inline") double acos(num x) => _acos(x.toDouble()); @patch +@pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") @pragma("vm:never-inline") double asin(num x) => _asin(x.toDouble()); @patch +@pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") @pragma("vm:never-inline") double atan(num x) => _atan(x.toDouble()); @patch +@pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") @pragma("vm:never-inline") double sqrt(num x) => _sqrt(x.toDouble()); @@ -208,6 +220,7 @@ class _Random implements Random { // This is a native to prevent 64-bit operations in Dart, which // fail with --throw_on_javascript_int_overflow. // TODO(regis): Implement in Dart and remove Random_nextState in math.cc. + @pragma("vm:recognized", "asm-intrinsic") void _nextState() native "Random_nextState"; int nextInt(int max) { diff --git a/sdk/lib/_internal/vm/lib/object_patch.dart b/sdk/lib/_internal/vm/lib/object_patch.dart index e862e5cd1a5..fe230699a2e 100644 --- a/sdk/lib/_internal/vm/lib/object_patch.dart +++ b/sdk/lib/_internal/vm/lib/object_patch.dart @@ -4,8 +4,10 @@ // part of "core_patch.dart"; +@pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int _getHash(obj) native "Object_getHash"; +@pragma("vm:recognized", "asm-intrinsic") void _setHash(obj, hash) native "Object_setHash"; @patch @@ -13,6 +15,7 @@ void _setHash(obj, hash) native "Object_setHash"; class Object { // The VM has its own implementation of equals. @patch + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) @pragma("vm:prefer-inline") bool operator ==(Object other) native "Object_equals"; @@ -52,9 +55,11 @@ class Object { } @patch + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Type") Type get runtimeType native "Object_runtimeType"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:entry-point", "call") @pragma("vm:exact-result-type", bool) static bool _haveSameRuntimeType(a, b) native "Object_haveSameRuntimeType"; diff --git a/sdk/lib/_internal/vm/lib/profiler.dart b/sdk/lib/_internal/vm/lib/profiler.dart index 745eaa5f175..812916e648d 100644 --- a/sdk/lib/_internal/vm/lib/profiler.dart +++ b/sdk/lib/_internal/vm/lib/profiler.dart @@ -18,11 +18,14 @@ class UserTag { class _UserTag implements UserTag { factory _UserTag(String label) native "UserTag_new"; String get label native "UserTag_label"; + @pragma("vm:recognized", "asm-intrinsic") UserTag makeCurrent() native "UserTag_makeCurrent"; } @patch UserTag getCurrentTag() => _getCurrentTag(); +@pragma("vm:recognized", "asm-intrinsic") UserTag _getCurrentTag() native "Profiler_getCurrentTag"; +@pragma("vm:recognized", "asm-intrinsic") UserTag _getDefaultTag() native "UserTag_defaultTag"; diff --git a/sdk/lib/_internal/vm/lib/regexp_patch.dart b/sdk/lib/_internal/vm/lib/regexp_patch.dart index 153080ba39c..73e38a1791c 100644 --- a/sdk/lib/_internal/vm/lib/regexp_patch.dart +++ b/sdk/lib/_internal/vm/lib/regexp_patch.dart @@ -350,9 +350,11 @@ class _RegExp implements RegExp { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ]; + @pragma("vm:recognized", "asm-intrinsic") List? _ExecuteMatch(String str, int start_index) native "RegExp_ExecuteMatch"; + @pragma("vm:recognized", "asm-intrinsic") List? _ExecuteMatchSticky(String str, int start_index) native "RegExp_ExecuteMatchSticky"; } diff --git a/sdk/lib/_internal/vm/lib/string_patch.dart b/sdk/lib/_internal/vm/lib/string_patch.dart index 5d6612d1051..18c1b56a183 100644 --- a/sdk/lib/_internal/vm/lib/string_patch.dart +++ b/sdk/lib/_internal/vm/lib/string_patch.dart @@ -94,9 +94,11 @@ abstract class _StringBase implements String { throw new UnsupportedError("_StringBase can't be instaniated"); } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int get hashCode native "String_getHashCode"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int get _identityHashCode native "String_getHashCode"; @@ -249,14 +251,17 @@ abstract class _StringBase implements String { static String _createFromCodePoints(List codePoints, int start, int end) native "StringBase_createFromCodePoints"; + @pragma("vm:recognized", "asm-intrinsic") String operator [](int index) native "String_charAt"; int codeUnitAt(int index); // Implemented in the subclasses. + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get length native "String_getLength"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) bool get isEmpty { return this.length == 0; @@ -306,6 +311,7 @@ abstract class _StringBase implements String { return 0; } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) bool _substringMatches(int start, String other) { if (other.isEmpty) return true; @@ -838,6 +844,7 @@ abstract class _StringBase implements String { * into a result string. * Modifies the input list if it contains non-`String` values. */ + @pragma("vm:recognized", "other") @pragma("vm:entry-point", "call") static String _interpolate(final List values) { final numValues = values.length; @@ -955,9 +962,11 @@ class _OneByteString extends _StringBase { throw "Unreachable"; } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int get hashCode native "String_getHashCode"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int codeUnitAt(int index) native "String_codeUnitAt"; @@ -965,11 +974,13 @@ class _OneByteString extends _StringBase { return _StringBase._isOneByteWhitespace(codeUnit); } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) bool operator ==(Object other) { return super == other; } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", _OneByteString) String _substringUncheckedNative(int startIndex, int endIndex) native "OneByteString_substringUnchecked"; @@ -1291,9 +1302,11 @@ class _TwoByteString extends _StringBase { return _StringBase._isTwoByteWhitespace(codeUnit); } + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int codeUnitAt(int index) native "String_codeUnitAt"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) bool operator ==(Object other) { return super == other; @@ -1310,6 +1323,7 @@ class _ExternalOneByteString extends _StringBase { return _StringBase._isOneByteWhitespace(codeUnit); } + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int codeUnitAt(int index) native "String_codeUnitAt"; @@ -1328,6 +1342,7 @@ class _ExternalTwoByteString extends _StringBase { return _StringBase._isTwoByteWhitespace(codeUnit); } + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int codeUnitAt(int index) native "String_codeUnitAt"; diff --git a/sdk/lib/_internal/vm/lib/type_patch.dart b/sdk/lib/_internal/vm/lib/type_patch.dart index 1b8f3c1cab9..52be7752587 100644 --- a/sdk/lib/_internal/vm/lib/type_patch.dart +++ b/sdk/lib/_internal/vm/lib/type_patch.dart @@ -18,9 +18,11 @@ class _Type extends _AbstractType { throw "Unreachable"; } + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int get hashCode native "Type_getHashCode"; + @pragma("vm:recognized", "asm-intrinsic") @pragma("vm:exact-result-type", bool) bool operator ==(other) native "Type_equality"; } diff --git a/sdk/lib/_internal/vm/lib/typed_data_patch.dart b/sdk/lib/_internal/vm/lib/typed_data_patch.dart index ccd3183dee3..8139cb5f435 100644 --- a/sdk/lib/_internal/vm/lib/typed_data_patch.dart +++ b/sdk/lib/_internal/vm/lib/typed_data_patch.dart @@ -36,6 +36,7 @@ import 'dart:math' show Random; @patch class ByteData implements TypedData { @patch + @pragma("vm:recognized", "other") @pragma("vm:entry-point") factory ByteData(int length) { final list = new Uint8List(length) as _TypedList; @@ -2066,57 +2067,82 @@ abstract class _TypedList extends _TypedListBase { // Methods implementing the collection interface. + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get length native "TypedData_length"; // Internal utility methods. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Smi") int _getInt8(int offsetInBytes) native "TypedData_GetInt8"; + @pragma("vm:recognized", "other") void _setInt8(int offsetInBytes, int value) native "TypedData_SetInt8"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Smi") int _getUint8(int offsetInBytes) native "TypedData_GetUint8"; + @pragma("vm:recognized", "other") void _setUint8(int offsetInBytes, int value) native "TypedData_SetUint8"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Smi") int _getInt16(int offsetInBytes) native "TypedData_GetInt16"; + @pragma("vm:recognized", "other") void _setInt16(int offsetInBytes, int value) native "TypedData_SetInt16"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Smi") int _getUint16(int offsetInBytes) native "TypedData_GetUint16"; + @pragma("vm:recognized", "other") void _setUint16(int offsetInBytes, int value) native "TypedData_SetUint16"; + @pragma("vm:recognized", "other") int _getInt32(int offsetInBytes) native "TypedData_GetInt32"; + @pragma("vm:recognized", "other") void _setInt32(int offsetInBytes, int value) native "TypedData_SetInt32"; + @pragma("vm:recognized", "other") int _getUint32(int offsetInBytes) native "TypedData_GetUint32"; + @pragma("vm:recognized", "other") void _setUint32(int offsetInBytes, int value) native "TypedData_SetUint32"; + @pragma("vm:recognized", "other") int _getInt64(int offsetInBytes) native "TypedData_GetInt64"; + @pragma("vm:recognized", "other") void _setInt64(int offsetInBytes, int value) native "TypedData_SetInt64"; + @pragma("vm:recognized", "other") int _getUint64(int offsetInBytes) native "TypedData_GetUint64"; + @pragma("vm:recognized", "other") void _setUint64(int offsetInBytes, int value) native "TypedData_SetUint64"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Double") double _getFloat32(int offsetInBytes) native "TypedData_GetFloat32"; + @pragma("vm:recognized", "other") void _setFloat32(int offsetInBytes, double value) native "TypedData_SetFloat32"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Double") double _getFloat64(int offsetInBytes) native "TypedData_GetFloat64"; + @pragma("vm:recognized", "other") void _setFloat64(int offsetInBytes, double value) native "TypedData_SetFloat64"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 _getFloat32x4(int offsetInBytes) native "TypedData_GetFloat32x4"; + @pragma("vm:recognized", "other") void _setFloat32x4(int offsetInBytes, Float32x4 value) native "TypedData_SetFloat32x4"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 _getInt32x4(int offsetInBytes) native "TypedData_GetInt32x4"; + @pragma("vm:recognized", "other") void _setInt32x4(int offsetInBytes, Int32x4 value) native "TypedData_SetInt32x4"; @@ -2145,6 +2171,7 @@ abstract class _TypedList extends _TypedListBase { @patch class Int8List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int8List) @pragma("vm:prefer-inline") factory Int8List(int length) native "TypedData_Int8Array_new"; @@ -2165,6 +2192,7 @@ class _Int8List extends _TypedList } // Method(s) implementing List interface. + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { if (index < 0 || index >= length) { @@ -2173,6 +2201,7 @@ class _Int8List extends _TypedList return _getInt8(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, int value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2194,6 +2223,7 @@ class _Int8List extends _TypedList @patch class Uint8List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Uint8List) @pragma("vm:prefer-inline") factory Uint8List(int length) native "TypedData_Uint8Array_new"; @@ -2214,6 +2244,7 @@ class _Uint8List extends _TypedList } // Methods implementing List interface. + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { if (index < 0 || index >= length) { @@ -2222,6 +2253,7 @@ class _Uint8List extends _TypedList return _getUint8(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, int value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2243,6 +2275,7 @@ class _Uint8List extends _TypedList @patch class Uint8ClampedList { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Uint8ClampedList) @pragma("vm:prefer-inline") factory Uint8ClampedList(int length) native "TypedData_Uint8ClampedArray_new"; @@ -2263,6 +2296,7 @@ class _Uint8ClampedList extends _TypedList } // Methods implementing List interface. + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { if (index < 0 || index >= length) { @@ -2271,6 +2305,7 @@ class _Uint8ClampedList extends _TypedList return _getUint8(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, int value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2292,6 +2327,7 @@ class _Uint8ClampedList extends _TypedList @patch class Int16List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int16List) @pragma("vm:prefer-inline") factory Int16List(int length) native "TypedData_Int16Array_new"; @@ -2312,6 +2348,7 @@ class _Int16List extends _TypedList } // Method(s) implementing List interface. + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { if (index < 0 || index >= length) { @@ -2320,6 +2357,7 @@ class _Int16List extends _TypedList return _getIndexedInt16(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, int value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2361,6 +2399,7 @@ class _Int16List extends _TypedList @patch class Uint16List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Uint16List) @pragma("vm:prefer-inline") factory Uint16List(int length) native "TypedData_Uint16Array_new"; @@ -2381,6 +2420,7 @@ class _Uint16List extends _TypedList } // Method(s) implementing the List interface. + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { if (index < 0 || index >= length) { @@ -2389,6 +2429,7 @@ class _Uint16List extends _TypedList return _getIndexedUint16(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, int value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2430,6 +2471,7 @@ class _Uint16List extends _TypedList @patch class Int32List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32List) @pragma("vm:prefer-inline") factory Int32List(int length) native "TypedData_Int32Array_new"; @@ -2450,6 +2492,7 @@ class _Int32List extends _TypedList } // Method(s) implementing the List interface. + @pragma("vm:recognized", "graph-intrinsic") int operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2457,6 +2500,7 @@ class _Int32List extends _TypedList return _getIndexedInt32(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, int value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2486,6 +2530,7 @@ class _Int32List extends _TypedList @patch class Uint32List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Uint32List) @pragma("vm:prefer-inline") factory Uint32List(int length) native "TypedData_Uint32Array_new"; @@ -2506,6 +2551,7 @@ class _Uint32List extends _TypedList } // Method(s) implementing the List interface. + @pragma("vm:recognized", "graph-intrinsic") int operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2513,6 +2559,7 @@ class _Uint32List extends _TypedList return _getIndexedUint32(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, int value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2542,6 +2589,7 @@ class _Uint32List extends _TypedList @patch class Int64List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int64List) @pragma("vm:prefer-inline") factory Int64List(int length) native "TypedData_Int64Array_new"; @@ -2562,6 +2610,7 @@ class _Int64List extends _TypedList } // Method(s) implementing the List interface. + @pragma("vm:recognized", "graph-intrinsic") int operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2569,6 +2618,7 @@ class _Int64List extends _TypedList return _getIndexedInt64(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, int value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2598,6 +2648,7 @@ class _Int64List extends _TypedList @patch class Uint64List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Uint64List) @pragma("vm:prefer-inline") factory Uint64List(int length) native "TypedData_Uint64Array_new"; @@ -2618,6 +2669,7 @@ class _Uint64List extends _TypedList } // Method(s) implementing the List interface. + @pragma("vm:recognized", "graph-intrinsic") int operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2625,6 +2677,7 @@ class _Uint64List extends _TypedList return _getIndexedUint64(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, int value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2654,6 +2707,7 @@ class _Uint64List extends _TypedList @patch class Float32List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32List) @pragma("vm:prefer-inline") factory Float32List(int length) native "TypedData_Float32Array_new"; @@ -2674,6 +2728,7 @@ class _Float32List extends _TypedList } // Method(s) implementing the List interface. + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") double operator [](int index) { if (index < 0 || index >= length) { @@ -2682,6 +2737,7 @@ class _Float32List extends _TypedList return _getIndexedFloat32(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, double value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2711,6 +2767,7 @@ class _Float32List extends _TypedList @patch class Float64List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64List) @pragma("vm:prefer-inline") factory Float64List(int length) native "TypedData_Float64Array_new"; @@ -2731,6 +2788,7 @@ class _Float64List extends _TypedList } // Method(s) implementing the List interface. + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") double operator [](int index) { if (index < 0 || index >= length) { @@ -2739,6 +2797,7 @@ class _Float64List extends _TypedList return _getIndexedFloat64(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, double value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2768,6 +2827,7 @@ class _Float64List extends _TypedList @patch class Float32x4List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4List) @pragma("vm:prefer-inline") factory Float32x4List(int length) native "TypedData_Float32x4Array_new"; @@ -2787,6 +2847,7 @@ class _Float32x4List extends _TypedList throw "Unreachable"; } + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Float32x4) Float32x4 operator [](int index) { if (index < 0 || index >= length) { @@ -2795,6 +2856,7 @@ class _Float32x4List extends _TypedList return _getIndexedFloat32x4(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, Float32x4 value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2824,6 +2886,7 @@ class _Float32x4List extends _TypedList @patch class Int32x4List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4List) @pragma("vm:prefer-inline") factory Int32x4List(int length) native "TypedData_Int32x4Array_new"; @@ -2843,6 +2906,7 @@ class _Int32x4List extends _TypedList throw "Unreachable"; } + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Int32x4) Int32x4 operator [](int index) { if (index < 0 || index >= length) { @@ -2851,6 +2915,7 @@ class _Int32x4List extends _TypedList return _getIndexedInt32x4(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, Int32x4 value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2880,6 +2945,7 @@ class _Int32x4List extends _TypedList @patch class Float64x2List { @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2List) @pragma("vm:prefer-inline") factory Float64x2List(int length) native "TypedData_Float64x2Array_new"; @@ -2899,6 +2965,7 @@ class _Float64x2List extends _TypedList throw "Unreachable"; } + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Float64x2) Float64x2 operator [](int index) { if (index < 0 || index >= length) { @@ -2907,6 +2974,7 @@ class _Float64x2List extends _TypedList return _getIndexedFloat64x2(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, Float64x2 value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2976,6 +3044,7 @@ class _ExternalUint8Array extends _TypedList } // Method(s) implementing the List interface. + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { if (index < 0 || index >= length) { @@ -2984,6 +3053,7 @@ class _ExternalUint8Array extends _TypedList return _getUint8(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, int value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -3011,6 +3081,7 @@ class _ExternalUint8ClampedArray extends _TypedList } // Method(s) implementing the List interface. + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { if (index < 0 || index >= length) { @@ -3019,6 +3090,7 @@ class _ExternalUint8ClampedArray extends _TypedList return _getUint8(index); } + @pragma("vm:recognized", "graph-intrinsic") void operator []=(int index, int value) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -3511,6 +3583,7 @@ class Float32x4 { return _Float32x4FromDoubles(x, y, z, w); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) static _Float32x4 _Float32x4FromDoubles( double x, double y, double z, double w) native "Float32x4_fromDoubles"; @@ -3522,65 +3595,90 @@ class Float32x4 { return _Float32x4Splat(v); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) static _Float32x4 _Float32x4Splat(double v) native "Float32x4_splat"; @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) factory Float32x4.zero() native "Float32x4_zero"; @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) factory Float32x4.fromInt32x4Bits(Int32x4 x) native "Float32x4_fromInt32x4Bits"; @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) factory Float32x4.fromFloat64x2(Float64x2 v) native "Float32x4_fromFloat64x2"; } @pragma("vm:entry-point") class _Float32x4 implements Float32x4 { + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Float32x4) Float32x4 operator +(Float32x4 other) native "Float32x4_add"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 operator -() native "Float32x4_negate"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Float32x4) Float32x4 operator -(Float32x4 other) native "Float32x4_sub"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", _Float32x4) Float32x4 operator *(Float32x4 other) native "Float32x4_mul"; + @pragma("vm:recognized", "graph-intrinsic") Float32x4 operator /(Float32x4 other) native "Float32x4_div"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 lessThan(Float32x4 other) native "Float32x4_cmplt"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 lessThanOrEqual(Float32x4 other) native "Float32x4_cmplte"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 greaterThan(Float32x4 other) native "Float32x4_cmpgt"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 greaterThanOrEqual(Float32x4 other) native "Float32x4_cmpgte"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 equal(Float32x4 other) native "Float32x4_cmpequal"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 notEqual(Float32x4 other) native "Float32x4_cmpnequal"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 scale(double s) native "Float32x4_scale"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 abs() native "Float32x4_abs"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 clamp(Float32x4 lowerLimit, Float32x4 upperLimit) native "Float32x4_clamp"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") double get x native "Float32x4_getX"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") double get y native "Float32x4_getY"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") double get z native "Float32x4_getZ"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Double") double get w native "Float32x4_getW"; + @pragma("vm:recognized", "other") int get signMask native "Float32x4_getSignMask"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 shuffle(int mask) native "Float32x4_shuffle"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 shuffleMix(Float32x4 zw, int mask) native "Float32x4_shuffleMix"; @@ -3590,6 +3688,7 @@ class _Float32x4 implements Float32x4 { return _withX(x); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 _withX(double x) native "Float32x4_setX"; @@ -3599,6 +3698,7 @@ class _Float32x4 implements Float32x4 { return _withY(y); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 _withY(double y) native "Float32x4_setY"; @@ -3608,6 +3708,7 @@ class _Float32x4 implements Float32x4 { return _withZ(z); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 _withZ(double z) native "Float32x4_setZ"; @@ -3617,17 +3718,23 @@ class _Float32x4 implements Float32x4 { return _withW(w); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 _withW(double w) native "Float32x4_setW"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 min(Float32x4 other) native "Float32x4_min"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 max(Float32x4 other) native "Float32x4_max"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 sqrt() native "Float32x4_sqrt"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 reciprocal() native "Float32x4_reciprocal"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 reciprocalSqrt() native "Float32x4_reciprocalSqrt"; } @@ -3644,6 +3751,7 @@ class Int32x4 { return _Int32x4FromInts(x, y, z, w); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) static _Int32x4 _Int32x4FromInts(int x, int y, int z, int w) native "Int32x4_fromInts"; @@ -3658,11 +3766,13 @@ class Int32x4 { return _Int32x4FromBools(x, y, z, w); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) static _Int32x4 _Int32x4FromBools(bool x, bool y, bool z, bool w) native "Int32x4_fromBools"; @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) factory Int32x4.fromFloat32x4Bits(Float32x4 x) native "Int32x4_fromFloat32x4Bits"; @@ -3679,9 +3789,12 @@ class _Int32x4 implements Int32x4 { int get y native "Int32x4_getY"; int get z native "Int32x4_getZ"; int get w native "Int32x4_getW"; + @pragma("vm:recognized", "other") int get signMask native "Int32x4_getSignMask"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 shuffle(int mask) native "Int32x4_shuffle"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 shuffleMix(Int32x4 zw, int mask) native "Int32x4_shuffleMix"; @@ -3721,12 +3834,16 @@ class _Int32x4 implements Int32x4 { @pragma("vm:exact-result-type", _Int32x4) Int32x4 _withW(int w) native "Int32x4_setW"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", bool) bool get flagX native "Int32x4_getFlagX"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", bool) bool get flagY native "Int32x4_getFlagY"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", bool) bool get flagZ native "Int32x4_getFlagZ"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", bool) bool get flagW native "Int32x4_getFlagW"; @@ -3736,6 +3853,7 @@ class _Int32x4 implements Int32x4 { return _withFlagX(x); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 _withFlagX(bool x) native "Int32x4_setFlagX"; @@ -3745,6 +3863,7 @@ class _Int32x4 implements Int32x4 { return _withFlagY(y); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 _withFlagY(bool y) native "Int32x4_setFlagY"; @@ -3754,6 +3873,7 @@ class _Int32x4 implements Int32x4 { return _withFlagZ(z); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 _withFlagZ(bool z) native "Int32x4_setFlagZ"; @@ -3763,9 +3883,11 @@ class _Int32x4 implements Int32x4 { return _withFlagW(w); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4) Int32x4 _withFlagW(bool w) native "Int32x4_setFlagW"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4) Float32x4 select(Float32x4 trueValue, Float32x4 falseValue) native "Int32x4_select"; @@ -3781,6 +3903,7 @@ class Float64x2 { return _Float64x2FromDoubles(x, y); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) static _Float64x2 _Float64x2FromDoubles(double x, double y) native "Float64x2_fromDoubles"; @@ -3792,36 +3915,49 @@ class Float64x2 { return _Float64x2Splat(v); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) static _Float64x2 _Float64x2Splat(double v) native "Float64x2_splat"; @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) factory Float64x2.zero() native "Float64x2_zero"; @patch + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) factory Float64x2.fromFloat32x4(Float32x4 v) native "Float64x2_fromFloat32x4"; } @pragma("vm:entry-point") class _Float64x2 implements Float64x2 { + @pragma("vm:recognized", "graph-intrinsic") Float64x2 operator +(Float64x2 other) native "Float64x2_add"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) Float64x2 operator -() native "Float64x2_negate"; + @pragma("vm:recognized", "graph-intrinsic") Float64x2 operator -(Float64x2 other) native "Float64x2_sub"; + @pragma("vm:recognized", "graph-intrinsic") Float64x2 operator *(Float64x2 other) native "Float64x2_mul"; + @pragma("vm:recognized", "graph-intrinsic") Float64x2 operator /(Float64x2 other) native "Float64x2_div"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) Float64x2 scale(double s) native "Float64x2_scale"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) Float64x2 abs() native "Float64x2_abs"; Float64x2 clamp(Float64x2 lowerLimit, Float64x2 upperLimit) native "Float64x2_clamp"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Double") double get x native "Float64x2_getX"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Double") double get y native "Float64x2_getY"; + @pragma("vm:recognized", "other") int get signMask native "Float64x2_getSignMask"; @pragma("vm:prefer-inline") @@ -3830,6 +3966,7 @@ class _Float64x2 implements Float64x2 { return _withX(x); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) Float64x2 _withX(double x) native "Float64x2_setX"; @@ -3839,13 +3976,17 @@ class _Float64x2 implements Float64x2 { return _withY(y); } + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) Float64x2 _withY(double y) native "Float64x2_setY"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) Float64x2 min(Float64x2 other) native "Float64x2_min"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) Float64x2 max(Float64x2 other) native "Float64x2_max"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2) Float64x2 sqrt() native "Float64x2_sqrt"; } @@ -3892,14 +4033,17 @@ abstract class _TypedListView extends _TypedListBase implements TypedData { return _typedData.buffer; } + @pragma("vm:recognized", "other") @pragma("vm:non-nullable-result-type") @pragma("vm:prefer-inline") _TypedList get _typedData native "TypedDataView_typedData"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get offsetInBytes native "TypedDataView_offsetInBytes"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get length native "TypedDataView_length"; @@ -3910,6 +4054,7 @@ class _Int8ArrayView extends _TypedListView with _IntListMixin, _TypedIntListMixin implements Int8List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int8ArrayView) factory _Int8ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Int8ArrayView_new"; @@ -3949,6 +4094,7 @@ class _Uint8ArrayView extends _TypedListView with _IntListMixin, _TypedIntListMixin implements Uint8List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Uint8ArrayView) factory _Uint8ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Uint8ArrayView_new"; @@ -3988,6 +4134,7 @@ class _Uint8ClampedArrayView extends _TypedListView with _IntListMixin, _TypedIntListMixin implements Uint8ClampedList { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Uint8ClampedArrayView) factory _Uint8ClampedArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Uint8ClampedArrayView_new"; @@ -4027,6 +4174,7 @@ class _Int16ArrayView extends _TypedListView with _IntListMixin, _TypedIntListMixin implements Int16List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int16ArrayView) factory _Int16ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Int16ArrayView_new"; @@ -4079,6 +4227,7 @@ class _Uint16ArrayView extends _TypedListView with _IntListMixin, _TypedIntListMixin implements Uint16List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Uint16ArrayView) factory _Uint16ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Uint16ArrayView_new"; @@ -4132,6 +4281,7 @@ class _Int32ArrayView extends _TypedListView with _IntListMixin, _TypedIntListMixin implements Int32List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32ArrayView) factory _Int32ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Int32ArrayView_new"; @@ -4171,6 +4321,7 @@ class _Uint32ArrayView extends _TypedListView with _IntListMixin, _TypedIntListMixin implements Uint32List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Uint32ArrayView) factory _Uint32ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Uint32ArrayView_new"; @@ -4210,6 +4361,7 @@ class _Int64ArrayView extends _TypedListView with _IntListMixin, _TypedIntListMixin implements Int64List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int64ArrayView) factory _Int64ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Int64ArrayView_new"; @@ -4249,6 +4401,7 @@ class _Uint64ArrayView extends _TypedListView with _IntListMixin, _TypedIntListMixin implements Uint64List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Uint64ArrayView) factory _Uint64ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Uint64ArrayView_new"; @@ -4288,6 +4441,7 @@ class _Float32ArrayView extends _TypedListView with _DoubleListMixin, _TypedDoubleListMixin implements Float32List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32ArrayView) factory _Float32ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Float32ArrayView_new"; @@ -4327,6 +4481,7 @@ class _Float64ArrayView extends _TypedListView with _DoubleListMixin, _TypedDoubleListMixin implements Float64List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64ArrayView) factory _Float64ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Float64ArrayView_new"; @@ -4366,6 +4521,7 @@ class _Float32x4ArrayView extends _TypedListView with _Float32x4ListMixin implements Float32x4List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float32x4ArrayView) factory _Float32x4ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Float32x4ArrayView_new"; @@ -4403,6 +4559,7 @@ class _Int32x4ArrayView extends _TypedListView with _Int32x4ListMixin implements Int32x4List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Int32x4ArrayView) factory _Int32x4ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Int32x4ArrayView_new"; @@ -4440,6 +4597,7 @@ class _Float64x2ArrayView extends _TypedListView with _Float64x2ListMixin implements Float64x2List { // Constructor. + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _Float64x2ArrayView) factory _Float64x2ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Float64x2ArrayView_new"; @@ -4474,6 +4632,7 @@ class _Float64x2ArrayView extends _TypedListView @pragma("vm:entry-point") class _ByteDataView implements ByteData { + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", _ByteDataView) factory _ByteDataView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_ByteDataView_new"; @@ -4720,14 +4879,17 @@ class _ByteDataView implements ByteData { _typedData._setFloat32x4(offsetInBytes + byteOffset, value); } + @pragma("vm:recognized", "other") @pragma("vm:non-nullable-result-type") @pragma("vm:prefer-inline") _TypedList get _typedData native "TypedDataView_typedData"; + @pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get offsetInBytes native "TypedDataView_offsetInBytes"; + @pragma("vm:recognized", "graph-intrinsic") @pragma("vm:exact-result-type", "dart:core#_Smi") @pragma("vm:prefer-inline") int get length native "TypedDataView_length"; @@ -4773,6 +4935,7 @@ int _toUint8(int value) { return value & 0xFF; } +@pragma("vm:recognized", "other") @pragma("vm:exact-result-type", "dart:core#_Smi") int _toClampedUint8(int value) { if (value < 0) return 0; diff --git a/sdk/lib/async/future.dart b/sdk/lib/async/future.dart index 0e92b2e3943..0d64fc805c1 100644 --- a/sdk/lib/async/future.dart +++ b/sdk/lib/async/future.dart @@ -361,6 +361,7 @@ abstract class Future { * The call to [cleanUp] should not throw. If it does, the error will be an * uncaught asynchronous error. */ + @pragma("vm:recognized", "other") @pragma("vm:entry-point") static Future> wait(Iterable> futures, {bool eagerError = false, void cleanUp(T successValue)?}) { diff --git a/sdk/lib/async/future_impl.dart b/sdk/lib/async/future_impl.dart index 0d38c61cdde..1b3e02f3ae6 100644 --- a/sdk/lib/async/future_impl.dart +++ b/sdk/lib/async/future_impl.dart @@ -768,6 +768,7 @@ class _Future implements Future { } } + @pragma("vm:recognized", "other") @pragma("vm:entry-point") Future timeout(Duration timeLimit, {FutureOr onTimeout()?}) { if (_isComplete) return new _Future.immediate(this); diff --git a/sdk/lib/core/object.dart b/sdk/lib/core/object.dart index 0f7d97bdc8e..b55d80ddad4 100644 --- a/sdk/lib/core/object.dart +++ b/sdk/lib/core/object.dart @@ -27,6 +27,7 @@ class Object { * through their identity. An [Object] instance is equal to itself * only. */ + @pragma("vm:recognized", "other") const Object(); /** diff --git a/sdk/lib/developer/timeline.dart b/sdk/lib/developer/timeline.dart index cc9cf4045ee..aaa0ee4b9a8 100644 --- a/sdk/lib/developer/timeline.dart +++ b/sdk/lib/developer/timeline.dart @@ -364,6 +364,7 @@ String _argumentsAsJson(Map? arguments) { } /// Returns true if the Dart Timeline stream is enabled. +@pragma("vm:recognized", "asm-intrinsic") external bool _isDartStreamEnabled(); /// Returns the next async task id.