[vm] Mark external methods used in Pointer.asTypedList() with resulting type

It allows the compiler to propagate this information in TFA - which
may be beneficial for cases when those methods aren't inlined.

TEST=ci

Change-Id: I55711806800e2a56e83a42cd51be705b68c3a4f3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/324701
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Tess Strickland <sstrickl@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
This commit is contained in:
Martin Kustermann 2023-09-13 09:48:56 +00:00 committed by Commit Queue
parent 655687db77
commit 781a8ef9c0
2 changed files with 20 additions and 10 deletions

View file

@ -310,16 +310,16 @@ namespace dart {
V(::, _storePointer, FfiStorePointer, 0x8b5a5939) \
V(::, _fromAddress, FfiFromAddress, 0x810f9a01) \
V(Pointer, get:address, FfiGetAddress, 0x7ccffbde) \
V(::, _asExternalTypedDataInt8, FfiAsExternalTypedDataInt8, 0x767b7ab8) \
V(::, _asExternalTypedDataInt16, FfiAsExternalTypedDataInt16, 0xd08e6de6) \
V(::, _asExternalTypedDataInt32, FfiAsExternalTypedDataInt32, 0x3815fd66) \
V(::, _asExternalTypedDataInt64, FfiAsExternalTypedDataInt64, 0xaf9bbc1b) \
V(::, _asExternalTypedDataUint8, FfiAsExternalTypedDataUint8, 0x3513fc54) \
V(::, _asExternalTypedDataUint16, FfiAsExternalTypedDataUint16, 0x8996925a) \
V(::, _asExternalTypedDataUint32, FfiAsExternalTypedDataUint32, 0xd2645061) \
V(::, _asExternalTypedDataUint64, FfiAsExternalTypedDataUint64, 0x06afe5e5) \
V(::, _asExternalTypedDataFloat, FfiAsExternalTypedDataFloat, 0x6f37d22c) \
V(::, _asExternalTypedDataDouble, FfiAsExternalTypedDataDouble, 0x40bf4e01) \
V(::, _asExternalTypedDataInt8, FfiAsExternalTypedDataInt8, 0x767b7e79) \
V(::, _asExternalTypedDataInt16, FfiAsExternalTypedDataInt16, 0xd08e71a7) \
V(::, _asExternalTypedDataInt32, FfiAsExternalTypedDataInt32, 0x38160127) \
V(::, _asExternalTypedDataInt64, FfiAsExternalTypedDataInt64, 0xaf9bbfdc) \
V(::, _asExternalTypedDataUint8, FfiAsExternalTypedDataUint8, 0x35140015) \
V(::, _asExternalTypedDataUint16, FfiAsExternalTypedDataUint16, 0x8996961b) \
V(::, _asExternalTypedDataUint32, FfiAsExternalTypedDataUint32, 0xd2645422) \
V(::, _asExternalTypedDataUint64, FfiAsExternalTypedDataUint64, 0x06afe9a6) \
V(::, _asExternalTypedDataFloat, FfiAsExternalTypedDataFloat, 0x6f37d5ed) \
V(::, _asExternalTypedDataDouble, FfiAsExternalTypedDataDouble, 0x40bf51c2) \
V(::, _getNativeField, GetNativeField, 0xa0051366) \
V(::, reachabilityFence, ReachabilityFence, 0x73009f9f) \
V(_Utf8Decoder, _scan, Utf8DecoderScan, 0xb98ea6c2) \

View file

@ -92,42 +92,52 @@ external DS _asFunctionInternal<DS extends Function, NS extends Function>(
@pragma("vm:recognized", "other")
@pragma("vm:idempotent")
@pragma("vm:exact-result-type", "dart:typed_data#_ExternalInt8Array")
external Int8List _asExternalTypedDataInt8(Pointer<Int8> ptr, int length);
@pragma("vm:recognized", "other")
@pragma("vm:idempotent")
@pragma("vm:exact-result-type", "dart:typed_data#_ExternalInt16Array")
external Int16List _asExternalTypedDataInt16(Pointer<Int16> ptr, int length);
@pragma("vm:recognized", "other")
@pragma("vm:idempotent")
@pragma("vm:exact-result-type", "dart:typed_data#_ExternalInt32Array")
external Int32List _asExternalTypedDataInt32(Pointer<Int32> ptr, int length);
@pragma("vm:recognized", "other")
@pragma("vm:idempotent")
@pragma("vm:exact-result-type", "dart:typed_data#_ExternalInt64Array")
external Int64List _asExternalTypedDataInt64(Pointer<Int64> ptr, int length);
@pragma("vm:recognized", "other")
@pragma("vm:idempotent")
@pragma("vm:exact-result-type", "dart:typed_data#_ExternalUint8Array")
external Uint8List _asExternalTypedDataUint8(Pointer<Uint8> ptr, int length);
@pragma("vm:recognized", "other")
@pragma("vm:idempotent")
@pragma("vm:exact-result-type", "dart:typed_data#_ExternalUint16Array")
external Uint16List _asExternalTypedDataUint16(Pointer<Uint16> ptr, int length);
@pragma("vm:recognized", "other")
@pragma("vm:idempotent")
@pragma("vm:exact-result-type", "dart:typed_data#_ExternalUint32Array")
external Uint32List _asExternalTypedDataUint32(Pointer<Uint32> ptr, int length);
@pragma("vm:recognized", "other")
@pragma("vm:idempotent")
@pragma("vm:exact-result-type", "dart:typed_data#_ExternalUint64Array")
external Uint64List _asExternalTypedDataUint64(Pointer<Uint64> ptr, int length);
@pragma("vm:recognized", "other")
@pragma("vm:idempotent")
@pragma("vm:exact-result-type", "dart:typed_data#_ExternalFloat32Array")
external Float32List _asExternalTypedDataFloat(Pointer<Float> ptr, int length);
@pragma("vm:recognized", "other")
@pragma("vm:idempotent")
@pragma("vm:exact-result-type", "dart:typed_data#_ExternalFloat64Array")
external Float64List _asExternalTypedDataDouble(
Pointer<Double> ptr, int length);