Skip to content

Commit 3f01c3e

Browse files
rmacnak-googlecommit-bot@chromium.org
authored andcommitted
[vm] Handle all typed data element types in various C APIs.
Change-Id: Ie27989895c1bb4f6fd609523f9fac0a7d4f437a9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/155360 Reviewed-by: Alexander Aprelev <[email protected]> Reviewed-by: Martin Kustermann <[email protected]> Commit-Queue: Ryan Macnak <[email protected]>
1 parent 68472f2 commit 3f01c3e

File tree

5 files changed

+99
-33
lines changed

5 files changed

+99
-33
lines changed

runtime/bin/file.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,6 +1305,10 @@ static int SizeInBytes(Dart_TypedData_Type type) {
13051305
case Dart_TypedData_kUint64:
13061306
case Dart_TypedData_kFloat64:
13071307
return 8;
1308+
case Dart_TypedData_kInt32x4:
1309+
case Dart_TypedData_kFloat32x4:
1310+
case Dart_TypedData_kFloat64x2:
1311+
return 16;
13081312
default:
13091313
break;
13101314
}

runtime/include/dart_api.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2358,7 +2358,9 @@ typedef enum {
23582358
Dart_TypedData_kUint64,
23592359
Dart_TypedData_kFloat32,
23602360
Dart_TypedData_kFloat64,
2361+
Dart_TypedData_kInt32x4,
23612362
Dart_TypedData_kFloat32x4,
2363+
Dart_TypedData_kFloat64x2,
23622364
Dart_TypedData_kInvalid
23632365
} Dart_TypedData_Type;
23642366

runtime/vm/dart_api_impl.cc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3820,11 +3820,21 @@ static Dart_TypedData_Type GetType(intptr_t class_id) {
38203820
case kExternalTypedDataFloat64ArrayCid:
38213821
type = Dart_TypedData_kFloat64;
38223822
break;
3823+
case kTypedDataInt32x4ArrayCid:
3824+
case kTypedDataInt32x4ArrayViewCid:
3825+
case kExternalTypedDataInt32x4ArrayCid:
3826+
type = Dart_TypedData_kInt32x4;
3827+
break;
38233828
case kTypedDataFloat32x4ArrayCid:
38243829
case kTypedDataFloat32x4ArrayViewCid:
38253830
case kExternalTypedDataFloat32x4ArrayCid:
38263831
type = Dart_TypedData_kFloat32x4;
38273832
break;
3833+
case kTypedDataFloat64x2ArrayCid:
3834+
case kTypedDataFloat64x2ArrayViewCid:
3835+
case kExternalTypedDataFloat64x2ArrayCid:
3836+
type = Dart_TypedData_kFloat64x2;
3837+
break;
38283838
default:
38293839
type = Dart_TypedData_kInvalid;
38303840
break;
@@ -4000,8 +4010,12 @@ DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type,
40004010
return NewTypedData(T, kTypedDataFloat32ArrayCid, length);
40014011
case Dart_TypedData_kFloat64:
40024012
return NewTypedData(T, kTypedDataFloat64ArrayCid, length);
4013+
case Dart_TypedData_kInt32x4:
4014+
return NewTypedData(T, kTypedDataInt32x4ArrayCid, length);
40034015
case Dart_TypedData_kFloat32x4:
40044016
return NewTypedData(T, kTypedDataFloat32x4ArrayCid, length);
4017+
case Dart_TypedData_kFloat64x2:
4018+
return NewTypedData(T, kTypedDataFloat64x2ArrayCid, length);
40054019
default:
40064020
return Api::NewError("%s expects argument 'type' to be of 'TypedData'",
40074021
CURRENT_FUNC);
@@ -4077,10 +4091,18 @@ DART_EXPORT Dart_Handle Dart_NewExternalTypedDataWithFinalizer(
40774091
return NewExternalTypedData(T, kExternalTypedDataFloat64ArrayCid, data,
40784092
length, peer, external_allocation_size,
40794093
callback);
4094+
case Dart_TypedData_kInt32x4:
4095+
return NewExternalTypedData(T, kExternalTypedDataInt32x4ArrayCid, data,
4096+
length, peer, external_allocation_size,
4097+
callback);
40804098
case Dart_TypedData_kFloat32x4:
40814099
return NewExternalTypedData(T, kExternalTypedDataFloat32x4ArrayCid, data,
40824100
length, peer, external_allocation_size,
40834101
callback);
4102+
case Dart_TypedData_kFloat64x2:
4103+
return NewExternalTypedData(T, kExternalTypedDataFloat64x2ArrayCid, data,
4104+
length, peer, external_allocation_size,
4105+
callback);
40844106
default:
40854107
return Api::NewError(
40864108
"%s expects argument 'type' to be of"

runtime/vm/dart_api_message.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ static int GetTypedDataSizeInBytes(Dart_TypedData_Type type) {
139139
case Dart_TypedData_kUint64:
140140
case Dart_TypedData_kFloat64:
141141
return 8;
142+
case Dart_TypedData_kInt32x4:
143+
case Dart_TypedData_kFloat32x4:
144+
case Dart_TypedData_kFloat64x2:
145+
return 16;
142146
default:
143147
break;
144148
}
@@ -636,7 +640,10 @@ Dart_CObject* ApiMessageReader::ReadInternalVMObject(intptr_t class_id,
636640
V(Int64, int64_t) \
637641
V(Uint64, uint64_t) \
638642
V(Float32, float) \
639-
V(Float64, double)
643+
V(Float64, double) \
644+
V(Int32x4, simd128_value_t) \
645+
V(Float32x4, simd128_value_t) \
646+
V(Float64x2, simd128_value_t)
640647

641648
#define EMIT_TYPED_DATA_CASES(type, c_type) \
642649
case kTypedData##type##ArrayCid: \

runtime/vm/snapshot_test.cc

Lines changed: 63 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1703,7 +1703,7 @@ VM_UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
17031703
static const char* kScriptChars =
17041704
"import 'dart:typed_data';\n"
17051705
"getTypedDataList() {\n"
1706-
" var list = List<dynamic>.filled(10, null);\n"
1706+
" var list = List<dynamic>.filled(13, null);\n"
17071707
" var index = 0;\n"
17081708
" list[index++] = Int8List(256);\n"
17091709
" list[index++] = Uint8List(256);\n"
@@ -1715,10 +1715,13 @@ VM_UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
17151715
" list[index++] = Uint64List(256);\n"
17161716
" list[index++] = Float32List(256);\n"
17171717
" list[index++] = Float64List(256);\n"
1718+
" list[index++] = Int32x4List(256);\n"
1719+
" list[index++] = Float32x4List(256);\n"
1720+
" list[index++] = Float64x2List(256);\n"
17181721
" return list;\n"
17191722
"}\n"
17201723
"getTypedDataViewList() {\n"
1721-
" var list = List<dynamic>.filled(30, null);\n"
1724+
" var list = List<dynamic>.filled(45, null);\n"
17221725
" var index = 0;\n"
17231726
" list[index++] = Int8List.view(Int8List(256).buffer);\n"
17241727
" list[index++] = Uint8List.view(Uint8List(256).buffer);\n"
@@ -1730,6 +1733,9 @@ VM_UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
17301733
" list[index++] = Uint64List.view(new Uint64List(256).buffer);\n"
17311734
" list[index++] = Float32List.view(new Float32List(256).buffer);\n"
17321735
" list[index++] = Float64List.view(new Float64List(256).buffer);\n"
1736+
" list[index++] = Int32x4List.view(new Int32x4List(256).buffer);\n"
1737+
" list[index++] = Float32x4List.view(new Float32x4List(256).buffer);\n"
1738+
" list[index++] = Float64x2List.view(new Float64x2List(256).buffer);\n"
17331739

17341740
" list[index++] = Int8List.view(new Int16List(256).buffer);\n"
17351741
" list[index++] = Uint8List.view(new Uint16List(256).buffer);\n"
@@ -1741,6 +1747,12 @@ VM_UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
17411747
" list[index++] = Uint8List.view(new Float32List(256).buffer);\n"
17421748
" list[index++] = Int8List.view(new Float64List(256).buffer);\n"
17431749
" list[index++] = Uint8List.view(new Float64List(256).buffer);\n"
1750+
" list[index++] = Int8List.view(new Int32x4List(256).buffer);\n"
1751+
" list[index++] = Uint8List.view(new Int32x4List(256).buffer);\n"
1752+
" list[index++] = Int8List.view(new Float32x4List(256).buffer);\n"
1753+
" list[index++] = Uint8List.view(new Float32x4List(256).buffer);\n"
1754+
" list[index++] = Int8List.view(new Float64x2List(256).buffer);\n"
1755+
" list[index++] = Uint8List.view(new Float64x2List(256).buffer);\n"
17441756

17451757
" list[index++] = Int16List.view(new Int8List(256).buffer);\n"
17461758
" list[index++] = Uint16List.view(new Uint8List(256).buffer);\n"
@@ -1752,10 +1764,16 @@ VM_UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
17521764
" list[index++] = Uint16List.view(new Float32List(256).buffer);\n"
17531765
" list[index++] = Int16List.view(new Float64List(256).buffer);\n"
17541766
" list[index++] = Uint16List.view(new Float64List(256).buffer);\n"
1767+
" list[index++] = Int16List.view(new Int32x4List(256).buffer);\n"
1768+
" list[index++] = Uint16List.view(new Int32x4List(256).buffer);\n"
1769+
" list[index++] = Int16List.view(new Float32x4List(256).buffer);\n"
1770+
" list[index++] = Uint16List.view(new Float32x4List(256).buffer);\n"
1771+
" list[index++] = Int16List.view(new Float64x2List(256).buffer);\n"
1772+
" list[index++] = Uint16List.view(new Float64x2List(256).buffer);\n"
17551773
" return list;\n"
17561774
"}\n"
17571775
"getMultipleTypedDataViewList() {\n"
1758-
" var list = List<dynamic>.filled(10, null);\n"
1776+
" var list = List<dynamic>.filled(13, null);\n"
17591777
" var index = 0;\n"
17601778
" var data = Uint8List(256).buffer;\n"
17611779
" list[index++] = Int8List.view(data);\n"
@@ -1768,6 +1786,9 @@ VM_UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
17681786
" list[index++] = Uint64List.view(data);\n"
17691787
" list[index++] = Float32List.view(data);\n"
17701788
" list[index++] = Float64List.view(data);\n"
1789+
" list[index++] = Int32x4List.view(data);\n"
1790+
" list[index++] = Float32x4List.view(data);\n"
1791+
" list[index++] = Float64x2List.view(data);\n"
17711792
" return list;\n"
17721793
"}\n";
17731794

@@ -1795,12 +1816,13 @@ VM_UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
17951816
Dart_TypedData_Type type;
17961817
int size;
17971818
} expected[] = {
1798-
{Dart_TypedData_kInt8, 256}, {Dart_TypedData_kUint8, 256},
1799-
{Dart_TypedData_kInt16, 512}, {Dart_TypedData_kUint16, 512},
1800-
{Dart_TypedData_kInt32, 1024}, {Dart_TypedData_kUint32, 1024},
1801-
{Dart_TypedData_kInt64, 2048}, {Dart_TypedData_kUint64, 2048},
1802-
{Dart_TypedData_kFloat32, 1024}, {Dart_TypedData_kFloat64, 2048},
1803-
{Dart_TypedData_kInvalid, -1}};
1819+
{Dart_TypedData_kInt8, 256}, {Dart_TypedData_kUint8, 256},
1820+
{Dart_TypedData_kInt16, 512}, {Dart_TypedData_kUint16, 512},
1821+
{Dart_TypedData_kInt32, 1024}, {Dart_TypedData_kUint32, 1024},
1822+
{Dart_TypedData_kInt64, 2048}, {Dart_TypedData_kUint64, 2048},
1823+
{Dart_TypedData_kFloat32, 1024}, {Dart_TypedData_kFloat64, 2048},
1824+
{Dart_TypedData_kInt32x4, 4096}, {Dart_TypedData_kFloat32x4, 4096},
1825+
{Dart_TypedData_kFloat64x2, 4096}, {Dart_TypedData_kInvalid, -1}};
18041826

18051827
int i = 0;
18061828
while (expected[i].type != Dart_TypedData_kInvalid) {
@@ -1822,23 +1844,31 @@ VM_UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
18221844
Dart_TypedData_Type type;
18231845
int size;
18241846
} expected[] = {
1825-
{Dart_TypedData_kInt8, 256}, {Dart_TypedData_kUint8, 256},
1826-
{Dart_TypedData_kInt16, 512}, {Dart_TypedData_kUint16, 512},
1827-
{Dart_TypedData_kInt32, 1024}, {Dart_TypedData_kUint32, 1024},
1828-
{Dart_TypedData_kInt64, 2048}, {Dart_TypedData_kUint64, 2048},
1829-
{Dart_TypedData_kFloat32, 1024}, {Dart_TypedData_kFloat64, 2048},
1830-
1831-
{Dart_TypedData_kInt8, 512}, {Dart_TypedData_kUint8, 512},
1832-
{Dart_TypedData_kInt8, 1024}, {Dart_TypedData_kUint8, 1024},
1833-
{Dart_TypedData_kInt8, 2048}, {Dart_TypedData_kUint8, 2048},
1834-
{Dart_TypedData_kInt8, 1024}, {Dart_TypedData_kUint8, 1024},
1835-
{Dart_TypedData_kInt8, 2048}, {Dart_TypedData_kUint8, 2048},
1836-
1837-
{Dart_TypedData_kInt16, 256}, {Dart_TypedData_kUint16, 256},
1838-
{Dart_TypedData_kInt16, 1024}, {Dart_TypedData_kUint16, 1024},
1839-
{Dart_TypedData_kInt16, 2048}, {Dart_TypedData_kUint16, 2048},
1840-
{Dart_TypedData_kInt16, 1024}, {Dart_TypedData_kUint16, 1024},
1841-
{Dart_TypedData_kInt16, 2048}, {Dart_TypedData_kUint16, 2048},
1847+
{Dart_TypedData_kInt8, 256}, {Dart_TypedData_kUint8, 256},
1848+
{Dart_TypedData_kInt16, 512}, {Dart_TypedData_kUint16, 512},
1849+
{Dart_TypedData_kInt32, 1024}, {Dart_TypedData_kUint32, 1024},
1850+
{Dart_TypedData_kInt64, 2048}, {Dart_TypedData_kUint64, 2048},
1851+
{Dart_TypedData_kFloat32, 1024}, {Dart_TypedData_kFloat64, 2048},
1852+
{Dart_TypedData_kInt32x4, 4096}, {Dart_TypedData_kFloat32x4, 4096},
1853+
{Dart_TypedData_kFloat64x2, 4096},
1854+
1855+
{Dart_TypedData_kInt8, 512}, {Dart_TypedData_kUint8, 512},
1856+
{Dart_TypedData_kInt8, 1024}, {Dart_TypedData_kUint8, 1024},
1857+
{Dart_TypedData_kInt8, 2048}, {Dart_TypedData_kUint8, 2048},
1858+
{Dart_TypedData_kInt8, 1024}, {Dart_TypedData_kUint8, 1024},
1859+
{Dart_TypedData_kInt8, 2048}, {Dart_TypedData_kUint8, 2048},
1860+
{Dart_TypedData_kInt8, 4096}, {Dart_TypedData_kUint8, 4096},
1861+
{Dart_TypedData_kInt8, 4096}, {Dart_TypedData_kUint8, 4096},
1862+
{Dart_TypedData_kInt8, 4096}, {Dart_TypedData_kUint8, 4096},
1863+
1864+
{Dart_TypedData_kInt16, 256}, {Dart_TypedData_kUint16, 256},
1865+
{Dart_TypedData_kInt16, 1024}, {Dart_TypedData_kUint16, 1024},
1866+
{Dart_TypedData_kInt16, 2048}, {Dart_TypedData_kUint16, 2048},
1867+
{Dart_TypedData_kInt16, 1024}, {Dart_TypedData_kUint16, 1024},
1868+
{Dart_TypedData_kInt16, 2048}, {Dart_TypedData_kUint16, 2048},
1869+
{Dart_TypedData_kInt16, 4096}, {Dart_TypedData_kUint16, 4096},
1870+
{Dart_TypedData_kInt16, 4096}, {Dart_TypedData_kUint16, 4096},
1871+
{Dart_TypedData_kInt16, 4096}, {Dart_TypedData_kUint16, 4096},
18421872

18431873
{Dart_TypedData_kInvalid, -1}};
18441874

@@ -1862,12 +1892,13 @@ VM_UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
18621892
Dart_TypedData_Type type;
18631893
int size;
18641894
} expected[] = {
1865-
{Dart_TypedData_kInt8, 256}, {Dart_TypedData_kUint8, 256},
1866-
{Dart_TypedData_kInt16, 256}, {Dart_TypedData_kUint16, 256},
1867-
{Dart_TypedData_kInt32, 256}, {Dart_TypedData_kUint32, 256},
1868-
{Dart_TypedData_kInt64, 256}, {Dart_TypedData_kUint64, 256},
1869-
{Dart_TypedData_kFloat32, 256}, {Dart_TypedData_kFloat64, 256},
1870-
{Dart_TypedData_kInvalid, -1}};
1895+
{Dart_TypedData_kInt8, 256}, {Dart_TypedData_kUint8, 256},
1896+
{Dart_TypedData_kInt16, 256}, {Dart_TypedData_kUint16, 256},
1897+
{Dart_TypedData_kInt32, 256}, {Dart_TypedData_kUint32, 256},
1898+
{Dart_TypedData_kInt64, 256}, {Dart_TypedData_kUint64, 256},
1899+
{Dart_TypedData_kFloat32, 256}, {Dart_TypedData_kFloat64, 256},
1900+
{Dart_TypedData_kInt32x4, 256}, {Dart_TypedData_kFloat32x4, 256},
1901+
{Dart_TypedData_kFloat64x2, 256}, {Dart_TypedData_kInvalid, -1}};
18711902

18721903
int i = 0;
18731904
while (expected[i].type != Dart_TypedData_kInvalid) {

0 commit comments

Comments
 (0)