1// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5(function(global, utils) {
6
7"use strict";
8
9%CheckIsBootstrapping();
10
11// -------------------------------------------------------------------
12// Imports
13
14var GlobalSIMD = global.SIMD;
15var MakeTypeError;
16var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol");
17
18utils.Import(function(from) {
19  MakeTypeError = from.MakeTypeError;
20});
21
22// -------------------------------------------------------------------
23
24macro SIMD_FLOAT_TYPES(FUNCTION)
25FUNCTION(Float32x4, float32x4, 4)
26endmacro
27
28macro SIMD_INT_TYPES(FUNCTION)
29FUNCTION(Int32x4, int32x4, 4)
30FUNCTION(Int16x8, int16x8, 8)
31FUNCTION(Int8x16, int8x16, 16)
32endmacro
33
34macro SIMD_UINT_TYPES(FUNCTION)
35FUNCTION(Uint32x4, uint32x4, 4)
36FUNCTION(Uint16x8, uint16x8, 8)
37FUNCTION(Uint8x16, uint8x16, 16)
38endmacro
39
40macro SIMD_BOOL_TYPES(FUNCTION)
41FUNCTION(Bool32x4, bool32x4, 4)
42FUNCTION(Bool16x8, bool16x8, 8)
43FUNCTION(Bool8x16, bool8x16, 16)
44endmacro
45
46macro SIMD_ALL_TYPES(FUNCTION)
47SIMD_FLOAT_TYPES(FUNCTION)
48SIMD_INT_TYPES(FUNCTION)
49SIMD_UINT_TYPES(FUNCTION)
50SIMD_BOOL_TYPES(FUNCTION)
51endmacro
52
53macro DECLARE_GLOBALS(NAME, TYPE, LANES)
54var GlobalNAME = GlobalSIMD.NAME;
55endmacro
56
57SIMD_ALL_TYPES(DECLARE_GLOBALS)
58
59macro DECLARE_COMMON_FUNCTIONS(NAME, TYPE, LANES)
60function NAMECheckJS(a) {
61  return %NAMECheck(a);
62}
63
64function NAMEToString() {
65  var value = %_ValueOf(this);
66  if (typeof(value) !== 'TYPE') {
67    throw MakeTypeError(kIncompatibleMethodReceiver,
68                        "NAME.prototype.toString", this);
69  }
70  var str = "SIMD.NAME(";
71  str += %NAMEExtractLane(value, 0);
72  for (var i = 1; i < LANES; i++) {
73    str += ", " + %NAMEExtractLane(value, i);
74  }
75  return str + ")";
76}
77
78function NAMEToLocaleString() {
79  var value = %_ValueOf(this);
80  if (typeof(value) !== 'TYPE') {
81    throw MakeTypeError(kIncompatibleMethodReceiver,
82                        "NAME.prototype.toLocaleString", this);
83  }
84  var str = "SIMD.NAME(";
85  str += %NAMEExtractLane(value, 0).toLocaleString();
86  for (var i = 1; i < LANES; i++) {
87    str += ", " + %NAMEExtractLane(value, i).toLocaleString();
88  }
89  return str + ")";
90}
91
92function NAMEValueOf() {
93  var value = %_ValueOf(this);
94  if (typeof(value) !== 'TYPE') {
95    throw MakeTypeError(kIncompatibleMethodReceiver,
96                        "NAME.prototype.valueOf", this);
97  }
98  return value;
99}
100
101function NAMEExtractLaneJS(instance, lane) {
102  return %NAMEExtractLane(instance, lane);
103}
104endmacro
105
106SIMD_ALL_TYPES(DECLARE_COMMON_FUNCTIONS)
107
108macro DECLARE_SHIFT_FUNCTIONS(NAME, TYPE, LANES)
109function NAMEShiftLeftByScalarJS(instance, shift) {
110  return %NAMEShiftLeftByScalar(instance, shift);
111}
112
113function NAMEShiftRightByScalarJS(instance, shift) {
114  return %NAMEShiftRightByScalar(instance, shift);
115}
116endmacro
117
118SIMD_INT_TYPES(DECLARE_SHIFT_FUNCTIONS)
119SIMD_UINT_TYPES(DECLARE_SHIFT_FUNCTIONS)
120
121macro SIMD_SMALL_INT_TYPES(FUNCTION)
122FUNCTION(Int16x8)
123FUNCTION(Int8x16)
124FUNCTION(Uint8x16)
125FUNCTION(Uint16x8)
126endmacro
127
128macro DECLARE_SMALL_INT_FUNCTIONS(NAME)
129function NAMEAddSaturateJS(a, b) {
130  return %NAMEAddSaturate(a, b);
131}
132
133function NAMESubSaturateJS(a, b) {
134  return %NAMESubSaturate(a, b);
135}
136endmacro
137
138SIMD_SMALL_INT_TYPES(DECLARE_SMALL_INT_FUNCTIONS)
139
140macro DECLARE_SIGNED_FUNCTIONS(NAME, TYPE, LANES)
141function NAMENegJS(a) {
142  return %NAMENeg(a);
143}
144endmacro
145
146SIMD_FLOAT_TYPES(DECLARE_SIGNED_FUNCTIONS)
147SIMD_INT_TYPES(DECLARE_SIGNED_FUNCTIONS)
148
149macro DECLARE_BOOL_FUNCTIONS(NAME, TYPE, LANES)
150function NAMEReplaceLaneJS(instance, lane, value) {
151  return %NAMEReplaceLane(instance, lane, value);
152}
153
154function NAMEAnyTrueJS(s) {
155  return %NAMEAnyTrue(s);
156}
157
158function NAMEAllTrueJS(s) {
159  return %NAMEAllTrue(s);
160}
161endmacro
162
163SIMD_BOOL_TYPES(DECLARE_BOOL_FUNCTIONS)
164
165macro SIMD_NUMERIC_TYPES(FUNCTION)
166SIMD_FLOAT_TYPES(FUNCTION)
167SIMD_INT_TYPES(FUNCTION)
168SIMD_UINT_TYPES(FUNCTION)
169endmacro
170
171macro DECLARE_NUMERIC_FUNCTIONS(NAME, TYPE, LANES)
172function NAMEReplaceLaneJS(instance, lane, value) {
173  return %NAMEReplaceLane(instance, lane, TO_NUMBER(value));
174}
175
176function NAMESelectJS(selector, a, b) {
177  return %NAMESelect(selector, a, b);
178}
179
180function NAMEAddJS(a, b) {
181  return %NAMEAdd(a, b);
182}
183
184function NAMESubJS(a, b) {
185  return %NAMESub(a, b);
186}
187
188function NAMEMulJS(a, b) {
189  return %NAMEMul(a, b);
190}
191
192function NAMEMinJS(a, b) {
193  return %NAMEMin(a, b);
194}
195
196function NAMEMaxJS(a, b) {
197  return %NAMEMax(a, b);
198}
199
200function NAMEEqualJS(a, b) {
201  return %NAMEEqual(a, b);
202}
203
204function NAMENotEqualJS(a, b) {
205  return %NAMENotEqual(a, b);
206}
207
208function NAMELessThanJS(a, b) {
209  return %NAMELessThan(a, b);
210}
211
212function NAMELessThanOrEqualJS(a, b) {
213  return %NAMELessThanOrEqual(a, b);
214}
215
216function NAMEGreaterThanJS(a, b) {
217  return %NAMEGreaterThan(a, b);
218}
219
220function NAMEGreaterThanOrEqualJS(a, b) {
221  return %NAMEGreaterThanOrEqual(a, b);
222}
223
224function NAMELoadJS(tarray, index) {
225  return %NAMELoad(tarray, index);
226}
227
228function NAMEStoreJS(tarray, index, a) {
229  return %NAMEStore(tarray, index, a);
230}
231endmacro
232
233SIMD_NUMERIC_TYPES(DECLARE_NUMERIC_FUNCTIONS)
234
235macro SIMD_LOGICAL_TYPES(FUNCTION)
236SIMD_INT_TYPES(FUNCTION)
237SIMD_UINT_TYPES(FUNCTION)
238SIMD_BOOL_TYPES(FUNCTION)
239endmacro
240
241macro DECLARE_LOGICAL_FUNCTIONS(NAME, TYPE, LANES)
242function NAMEAndJS(a, b) {
243  return %NAMEAnd(a, b);
244}
245
246function NAMEOrJS(a, b) {
247  return %NAMEOr(a, b);
248}
249
250function NAMEXorJS(a, b) {
251  return %NAMEXor(a, b);
252}
253
254function NAMENotJS(a) {
255  return %NAMENot(a);
256}
257endmacro
258
259SIMD_LOGICAL_TYPES(DECLARE_LOGICAL_FUNCTIONS)
260
261macro SIMD_FROM_TYPES(FUNCTION)
262FUNCTION(Float32x4, Int32x4)
263FUNCTION(Float32x4, Uint32x4)
264FUNCTION(Int32x4, Float32x4)
265FUNCTION(Int32x4, Uint32x4)
266FUNCTION(Uint32x4, Float32x4)
267FUNCTION(Uint32x4, Int32x4)
268FUNCTION(Int16x8, Uint16x8)
269FUNCTION(Uint16x8, Int16x8)
270FUNCTION(Int8x16, Uint8x16)
271FUNCTION(Uint8x16, Int8x16)
272endmacro
273
274macro DECLARE_FROM_FUNCTIONS(TO, FROM)
275function TOFromFROMJS(a) {
276  return %TOFromFROM(a);
277}
278endmacro
279
280SIMD_FROM_TYPES(DECLARE_FROM_FUNCTIONS)
281
282macro SIMD_FROM_BITS_TYPES(FUNCTION)
283FUNCTION(Float32x4, Int32x4)
284FUNCTION(Float32x4, Uint32x4)
285FUNCTION(Float32x4, Int16x8)
286FUNCTION(Float32x4, Uint16x8)
287FUNCTION(Float32x4, Int8x16)
288FUNCTION(Float32x4, Uint8x16)
289FUNCTION(Int32x4, Float32x4)
290FUNCTION(Int32x4, Uint32x4)
291FUNCTION(Int32x4, Int16x8)
292FUNCTION(Int32x4, Uint16x8)
293FUNCTION(Int32x4, Int8x16)
294FUNCTION(Int32x4, Uint8x16)
295FUNCTION(Uint32x4, Float32x4)
296FUNCTION(Uint32x4, Int32x4)
297FUNCTION(Uint32x4, Int16x8)
298FUNCTION(Uint32x4, Uint16x8)
299FUNCTION(Uint32x4, Int8x16)
300FUNCTION(Uint32x4, Uint8x16)
301FUNCTION(Int16x8, Float32x4)
302FUNCTION(Int16x8, Int32x4)
303FUNCTION(Int16x8, Uint32x4)
304FUNCTION(Int16x8, Uint16x8)
305FUNCTION(Int16x8, Int8x16)
306FUNCTION(Int16x8, Uint8x16)
307FUNCTION(Uint16x8, Float32x4)
308FUNCTION(Uint16x8, Int32x4)
309FUNCTION(Uint16x8, Uint32x4)
310FUNCTION(Uint16x8, Int16x8)
311FUNCTION(Uint16x8, Int8x16)
312FUNCTION(Uint16x8, Uint8x16)
313FUNCTION(Int8x16, Float32x4)
314FUNCTION(Int8x16, Int32x4)
315FUNCTION(Int8x16, Uint32x4)
316FUNCTION(Int8x16, Int16x8)
317FUNCTION(Int8x16, Uint16x8)
318FUNCTION(Int8x16, Uint8x16)
319FUNCTION(Uint8x16, Float32x4)
320FUNCTION(Uint8x16, Int32x4)
321FUNCTION(Uint8x16, Uint32x4)
322FUNCTION(Uint8x16, Int16x8)
323FUNCTION(Uint8x16, Uint16x8)
324FUNCTION(Uint8x16, Int8x16)
325endmacro
326
327macro DECLARE_FROM_BITS_FUNCTIONS(TO, FROM)
328function TOFromFROMBitsJS(a) {
329  return %TOFromFROMBits(a);
330}
331endmacro
332
333SIMD_FROM_BITS_TYPES(DECLARE_FROM_BITS_FUNCTIONS)
334
335
336macro SIMD_LOADN_STOREN_TYPES(FUNCTION)
337FUNCTION(Float32x4, 1)
338FUNCTION(Float32x4, 2)
339FUNCTION(Float32x4, 3)
340FUNCTION(Int32x4, 1)
341FUNCTION(Int32x4, 2)
342FUNCTION(Int32x4, 3)
343FUNCTION(Uint32x4, 1)
344FUNCTION(Uint32x4, 2)
345FUNCTION(Uint32x4, 3)
346endmacro
347
348macro DECLARE_LOADN_STOREN_FUNCTIONS(NAME, COUNT)
349function NAMELoadCOUNTJS(tarray, index) {
350  return %NAMELoadCOUNT(tarray, index);
351}
352
353function NAMEStoreCOUNTJS(tarray, index, a) {
354  return %NAMEStoreCOUNT(tarray, index, a);
355}
356endmacro
357
358SIMD_LOADN_STOREN_TYPES(DECLARE_LOADN_STOREN_FUNCTIONS)
359
360//-------------------------------------------------------------------
361
362macro SIMD_X4_TYPES(FUNCTION)
363FUNCTION(Float32x4)
364FUNCTION(Int32x4)
365FUNCTION(Uint32x4)
366FUNCTION(Bool32x4)
367endmacro
368
369macro DECLARE_X4_FUNCTIONS(NAME)
370function NAMESplat(s) {
371  return %CreateNAME(s, s, s, s);
372}
373
374function NAMESwizzleJS(a, c0, c1, c2, c3) {
375  return %NAMESwizzle(a, c0, c1, c2, c3);
376}
377
378function NAMEShuffleJS(a, b, c0, c1, c2, c3) {
379  return %NAMEShuffle(a, b, c0, c1, c2, c3);
380}
381endmacro
382
383SIMD_X4_TYPES(DECLARE_X4_FUNCTIONS)
384
385macro SIMD_X8_TYPES(FUNCTION)
386FUNCTION(Int16x8)
387FUNCTION(Uint16x8)
388FUNCTION(Bool16x8)
389endmacro
390
391macro DECLARE_X8_FUNCTIONS(NAME)
392function NAMESplat(s) {
393  return %CreateNAME(s, s, s, s, s, s, s, s);
394}
395
396function NAMESwizzleJS(a, c0, c1, c2, c3, c4, c5, c6, c7) {
397  return %NAMESwizzle(a, c0, c1, c2, c3, c4, c5, c6, c7);
398}
399
400function NAMEShuffleJS(a, b, c0, c1, c2, c3, c4, c5, c6, c7) {
401  return %NAMEShuffle(a, b, c0, c1, c2, c3, c4, c5, c6, c7);
402}
403endmacro
404
405SIMD_X8_TYPES(DECLARE_X8_FUNCTIONS)
406
407macro SIMD_X16_TYPES(FUNCTION)
408FUNCTION(Int8x16)
409FUNCTION(Uint8x16)
410FUNCTION(Bool8x16)
411endmacro
412
413macro DECLARE_X16_FUNCTIONS(NAME)
414function NAMESplat(s) {
415  return %CreateNAME(s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s);
416}
417
418function NAMESwizzleJS(a, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11,
419                          c12, c13, c14, c15) {
420  return %NAMESwizzle(a, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11,
421                         c12, c13, c14, c15);
422}
423
424function NAMEShuffleJS(a, b, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10,
425                             c11, c12, c13, c14, c15) {
426  return %NAMEShuffle(a, b, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10,
427                            c11, c12, c13, c14, c15);
428}
429endmacro
430
431SIMD_X16_TYPES(DECLARE_X16_FUNCTIONS)
432
433//-------------------------------------------------------------------
434
435function Float32x4Constructor(c0, c1, c2, c3) {
436  if (!IS_UNDEFINED(new.target)) {
437    throw MakeTypeError(kNotConstructor, "Float32x4");
438  }
439  return %CreateFloat32x4(TO_NUMBER(c0), TO_NUMBER(c1),
440                          TO_NUMBER(c2), TO_NUMBER(c3));
441}
442
443
444function Int32x4Constructor(c0, c1, c2, c3) {
445  if (!IS_UNDEFINED(new.target)) {
446    throw MakeTypeError(kNotConstructor, "Int32x4");
447  }
448  return %CreateInt32x4(TO_NUMBER(c0), TO_NUMBER(c1),
449                        TO_NUMBER(c2), TO_NUMBER(c3));
450}
451
452
453function Uint32x4Constructor(c0, c1, c2, c3) {
454  if (!IS_UNDEFINED(new.target)) {
455    throw MakeTypeError(kNotConstructor, "Uint32x4");
456  }
457  return %CreateUint32x4(TO_NUMBER(c0), TO_NUMBER(c1),
458                         TO_NUMBER(c2), TO_NUMBER(c3));
459}
460
461
462function Bool32x4Constructor(c0, c1, c2, c3) {
463  if (!IS_UNDEFINED(new.target)) {
464    throw MakeTypeError(kNotConstructor, "Bool32x4");
465  }
466  return %CreateBool32x4(c0, c1, c2, c3);
467}
468
469
470function Int16x8Constructor(c0, c1, c2, c3, c4, c5, c6, c7) {
471  if (!IS_UNDEFINED(new.target)) {
472    throw MakeTypeError(kNotConstructor, "Int16x8");
473  }
474  return %CreateInt16x8(TO_NUMBER(c0), TO_NUMBER(c1),
475                        TO_NUMBER(c2), TO_NUMBER(c3),
476                        TO_NUMBER(c4), TO_NUMBER(c5),
477                        TO_NUMBER(c6), TO_NUMBER(c7));
478}
479
480
481function Uint16x8Constructor(c0, c1, c2, c3, c4, c5, c6, c7) {
482  if (!IS_UNDEFINED(new.target)) {
483    throw MakeTypeError(kNotConstructor, "Uint16x8");
484  }
485  return %CreateUint16x8(TO_NUMBER(c0), TO_NUMBER(c1),
486                         TO_NUMBER(c2), TO_NUMBER(c3),
487                         TO_NUMBER(c4), TO_NUMBER(c5),
488                         TO_NUMBER(c6), TO_NUMBER(c7));
489}
490
491
492function Bool16x8Constructor(c0, c1, c2, c3, c4, c5, c6, c7) {
493  if (!IS_UNDEFINED(new.target)) {
494    throw MakeTypeError(kNotConstructor, "Bool16x8");
495  }
496  return %CreateBool16x8(c0, c1, c2, c3, c4, c5, c6, c7);
497}
498
499
500function Int8x16Constructor(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11,
501                            c12, c13, c14, c15) {
502  if (!IS_UNDEFINED(new.target)) {
503    throw MakeTypeError(kNotConstructor, "Int8x16");
504  }
505  return %CreateInt8x16(TO_NUMBER(c0), TO_NUMBER(c1),
506                        TO_NUMBER(c2), TO_NUMBER(c3),
507                        TO_NUMBER(c4), TO_NUMBER(c5),
508                        TO_NUMBER(c6), TO_NUMBER(c7),
509                        TO_NUMBER(c8), TO_NUMBER(c9),
510                        TO_NUMBER(c10), TO_NUMBER(c11),
511                        TO_NUMBER(c12), TO_NUMBER(c13),
512                        TO_NUMBER(c14), TO_NUMBER(c15));
513}
514
515
516function Uint8x16Constructor(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11,
517                             c12, c13, c14, c15) {
518  if (!IS_UNDEFINED(new.target)) {
519    throw MakeTypeError(kNotConstructor, "Uint8x16");
520  }
521  return %CreateUint8x16(TO_NUMBER(c0), TO_NUMBER(c1),
522                         TO_NUMBER(c2), TO_NUMBER(c3),
523                         TO_NUMBER(c4), TO_NUMBER(c5),
524                         TO_NUMBER(c6), TO_NUMBER(c7),
525                         TO_NUMBER(c8), TO_NUMBER(c9),
526                         TO_NUMBER(c10), TO_NUMBER(c11),
527                         TO_NUMBER(c12), TO_NUMBER(c13),
528                         TO_NUMBER(c14), TO_NUMBER(c15));
529}
530
531
532function Bool8x16Constructor(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11,
533                             c12, c13, c14, c15) {
534  if (!IS_UNDEFINED(new.target)) {
535    throw MakeTypeError(kNotConstructor, "Bool8x16");
536  }
537  return %CreateBool8x16(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
538                         c13, c14, c15);
539}
540
541
542function Float32x4AbsJS(a) {
543  return %Float32x4Abs(a);
544}
545
546
547function Float32x4SqrtJS(a) {
548  return %Float32x4Sqrt(a);
549}
550
551
552function Float32x4RecipApproxJS(a) {
553  return %Float32x4RecipApprox(a);
554}
555
556
557function Float32x4RecipSqrtApproxJS(a) {
558  return %Float32x4RecipSqrtApprox(a);
559}
560
561
562function Float32x4DivJS(a, b) {
563  return %Float32x4Div(a, b);
564}
565
566
567function Float32x4MinNumJS(a, b) {
568  return %Float32x4MinNum(a, b);
569}
570
571
572function Float32x4MaxNumJS(a, b) {
573  return %Float32x4MaxNum(a, b);
574}
575
576
577%AddNamedProperty(GlobalSIMD, toStringTagSymbol, 'SIMD', READ_ONLY | DONT_ENUM);
578
579macro SETUP_SIMD_TYPE(NAME, TYPE, LANES)
580%SetCode(GlobalNAME, NAMEConstructor);
581%FunctionSetPrototype(GlobalNAME, {});
582%AddNamedProperty(GlobalNAME.prototype, 'constructor', GlobalNAME,
583    DONT_ENUM);
584%AddNamedProperty(GlobalNAME.prototype, toStringTagSymbol, 'NAME',
585    DONT_ENUM | READ_ONLY);
586utils.InstallFunctions(GlobalNAME.prototype, DONT_ENUM, [
587  'toLocaleString', NAMEToLocaleString,
588  'toString', NAMEToString,
589  'valueOf', NAMEValueOf,
590]);
591endmacro
592
593SIMD_ALL_TYPES(SETUP_SIMD_TYPE)
594
595//-------------------------------------------------------------------
596
597utils.InstallFunctions(GlobalFloat32x4, DONT_ENUM, [
598  'splat', Float32x4Splat,
599  'check', Float32x4CheckJS,
600  'extractLane', Float32x4ExtractLaneJS,
601  'replaceLane', Float32x4ReplaceLaneJS,
602  'neg', Float32x4NegJS,
603  'abs', Float32x4AbsJS,
604  'sqrt', Float32x4SqrtJS,
605  'reciprocalApproximation', Float32x4RecipApproxJS,
606  'reciprocalSqrtApproximation', Float32x4RecipSqrtApproxJS,
607  'add', Float32x4AddJS,
608  'sub', Float32x4SubJS,
609  'mul', Float32x4MulJS,
610  'div', Float32x4DivJS,
611  'min', Float32x4MinJS,
612  'max', Float32x4MaxJS,
613  'minNum', Float32x4MinNumJS,
614  'maxNum', Float32x4MaxNumJS,
615  'lessThan', Float32x4LessThanJS,
616  'lessThanOrEqual', Float32x4LessThanOrEqualJS,
617  'greaterThan', Float32x4GreaterThanJS,
618  'greaterThanOrEqual', Float32x4GreaterThanOrEqualJS,
619  'equal', Float32x4EqualJS,
620  'notEqual', Float32x4NotEqualJS,
621  'select', Float32x4SelectJS,
622  'swizzle', Float32x4SwizzleJS,
623  'shuffle', Float32x4ShuffleJS,
624  'fromInt32x4', Float32x4FromInt32x4JS,
625  'fromUint32x4', Float32x4FromUint32x4JS,
626  'fromInt32x4Bits', Float32x4FromInt32x4BitsJS,
627  'fromUint32x4Bits', Float32x4FromUint32x4BitsJS,
628  'fromInt16x8Bits', Float32x4FromInt16x8BitsJS,
629  'fromUint16x8Bits', Float32x4FromUint16x8BitsJS,
630  'fromInt8x16Bits', Float32x4FromInt8x16BitsJS,
631  'fromUint8x16Bits', Float32x4FromUint8x16BitsJS,
632  'load', Float32x4LoadJS,
633  'load1', Float32x4Load1JS,
634  'load2', Float32x4Load2JS,
635  'load3', Float32x4Load3JS,
636  'store', Float32x4StoreJS,
637  'store1', Float32x4Store1JS,
638  'store2', Float32x4Store2JS,
639  'store3', Float32x4Store3JS,
640]);
641
642utils.InstallFunctions(GlobalInt32x4, DONT_ENUM, [
643  'splat', Int32x4Splat,
644  'check', Int32x4CheckJS,
645  'extractLane', Int32x4ExtractLaneJS,
646  'replaceLane', Int32x4ReplaceLaneJS,
647  'neg', Int32x4NegJS,
648  'add', Int32x4AddJS,
649  'sub', Int32x4SubJS,
650  'mul', Int32x4MulJS,
651  'min', Int32x4MinJS,
652  'max', Int32x4MaxJS,
653  'and', Int32x4AndJS,
654  'or', Int32x4OrJS,
655  'xor', Int32x4XorJS,
656  'not', Int32x4NotJS,
657  'shiftLeftByScalar', Int32x4ShiftLeftByScalarJS,
658  'shiftRightByScalar', Int32x4ShiftRightByScalarJS,
659  'lessThan', Int32x4LessThanJS,
660  'lessThanOrEqual', Int32x4LessThanOrEqualJS,
661  'greaterThan', Int32x4GreaterThanJS,
662  'greaterThanOrEqual', Int32x4GreaterThanOrEqualJS,
663  'equal', Int32x4EqualJS,
664  'notEqual', Int32x4NotEqualJS,
665  'select', Int32x4SelectJS,
666  'swizzle', Int32x4SwizzleJS,
667  'shuffle', Int32x4ShuffleJS,
668  'fromFloat32x4', Int32x4FromFloat32x4JS,
669  'fromUint32x4', Int32x4FromUint32x4JS,
670  'fromFloat32x4Bits', Int32x4FromFloat32x4BitsJS,
671  'fromUint32x4Bits', Int32x4FromUint32x4BitsJS,
672  'fromInt16x8Bits', Int32x4FromInt16x8BitsJS,
673  'fromUint16x8Bits', Int32x4FromUint16x8BitsJS,
674  'fromInt8x16Bits', Int32x4FromInt8x16BitsJS,
675  'fromUint8x16Bits', Int32x4FromUint8x16BitsJS,
676  'load', Int32x4LoadJS,
677  'load1', Int32x4Load1JS,
678  'load2', Int32x4Load2JS,
679  'load3', Int32x4Load3JS,
680  'store', Int32x4StoreJS,
681  'store1', Int32x4Store1JS,
682  'store2', Int32x4Store2JS,
683  'store3', Int32x4Store3JS,
684]);
685
686utils.InstallFunctions(GlobalUint32x4, DONT_ENUM, [
687  'splat', Uint32x4Splat,
688  'check', Uint32x4CheckJS,
689  'extractLane', Uint32x4ExtractLaneJS,
690  'replaceLane', Uint32x4ReplaceLaneJS,
691  'add', Uint32x4AddJS,
692  'sub', Uint32x4SubJS,
693  'mul', Uint32x4MulJS,
694  'min', Uint32x4MinJS,
695  'max', Uint32x4MaxJS,
696  'and', Uint32x4AndJS,
697  'or', Uint32x4OrJS,
698  'xor', Uint32x4XorJS,
699  'not', Uint32x4NotJS,
700  'shiftLeftByScalar', Uint32x4ShiftLeftByScalarJS,
701  'shiftRightByScalar', Uint32x4ShiftRightByScalarJS,
702  'lessThan', Uint32x4LessThanJS,
703  'lessThanOrEqual', Uint32x4LessThanOrEqualJS,
704  'greaterThan', Uint32x4GreaterThanJS,
705  'greaterThanOrEqual', Uint32x4GreaterThanOrEqualJS,
706  'equal', Uint32x4EqualJS,
707  'notEqual', Uint32x4NotEqualJS,
708  'select', Uint32x4SelectJS,
709  'swizzle', Uint32x4SwizzleJS,
710  'shuffle', Uint32x4ShuffleJS,
711  'fromFloat32x4', Uint32x4FromFloat32x4JS,
712  'fromInt32x4', Uint32x4FromInt32x4JS,
713  'fromFloat32x4Bits', Uint32x4FromFloat32x4BitsJS,
714  'fromInt32x4Bits', Uint32x4FromInt32x4BitsJS,
715  'fromInt16x8Bits', Uint32x4FromInt16x8BitsJS,
716  'fromUint16x8Bits', Uint32x4FromUint16x8BitsJS,
717  'fromInt8x16Bits', Uint32x4FromInt8x16BitsJS,
718  'fromUint8x16Bits', Uint32x4FromUint8x16BitsJS,
719  'load', Uint32x4LoadJS,
720  'load1', Uint32x4Load1JS,
721  'load2', Uint32x4Load2JS,
722  'load3', Uint32x4Load3JS,
723  'store', Uint32x4StoreJS,
724  'store1', Uint32x4Store1JS,
725  'store2', Uint32x4Store2JS,
726  'store3', Uint32x4Store3JS,
727]);
728
729utils.InstallFunctions(GlobalBool32x4, DONT_ENUM, [
730  'splat', Bool32x4Splat,
731  'check', Bool32x4CheckJS,
732  'extractLane', Bool32x4ExtractLaneJS,
733  'replaceLane', Bool32x4ReplaceLaneJS,
734  'and', Bool32x4AndJS,
735  'or', Bool32x4OrJS,
736  'xor', Bool32x4XorJS,
737  'not', Bool32x4NotJS,
738  'anyTrue', Bool32x4AnyTrueJS,
739  'allTrue', Bool32x4AllTrueJS,
740  'swizzle', Bool32x4SwizzleJS,
741  'shuffle', Bool32x4ShuffleJS,
742]);
743
744utils.InstallFunctions(GlobalInt16x8, DONT_ENUM, [
745  'splat', Int16x8Splat,
746  'check', Int16x8CheckJS,
747  'extractLane', Int16x8ExtractLaneJS,
748  'replaceLane', Int16x8ReplaceLaneJS,
749  'neg', Int16x8NegJS,
750  'add', Int16x8AddJS,
751  'sub', Int16x8SubJS,
752  'addSaturate', Int16x8AddSaturateJS,
753  'subSaturate', Int16x8SubSaturateJS,
754  'mul', Int16x8MulJS,
755  'min', Int16x8MinJS,
756  'max', Int16x8MaxJS,
757  'and', Int16x8AndJS,
758  'or', Int16x8OrJS,
759  'xor', Int16x8XorJS,
760  'not', Int16x8NotJS,
761  'shiftLeftByScalar', Int16x8ShiftLeftByScalarJS,
762  'shiftRightByScalar', Int16x8ShiftRightByScalarJS,
763  'lessThan', Int16x8LessThanJS,
764  'lessThanOrEqual', Int16x8LessThanOrEqualJS,
765  'greaterThan', Int16x8GreaterThanJS,
766  'greaterThanOrEqual', Int16x8GreaterThanOrEqualJS,
767  'equal', Int16x8EqualJS,
768  'notEqual', Int16x8NotEqualJS,
769  'select', Int16x8SelectJS,
770  'swizzle', Int16x8SwizzleJS,
771  'shuffle', Int16x8ShuffleJS,
772  'fromUint16x8', Int16x8FromUint16x8JS,
773  'fromFloat32x4Bits', Int16x8FromFloat32x4BitsJS,
774  'fromInt32x4Bits', Int16x8FromInt32x4BitsJS,
775  'fromUint32x4Bits', Int16x8FromUint32x4BitsJS,
776  'fromUint16x8Bits', Int16x8FromUint16x8BitsJS,
777  'fromInt8x16Bits', Int16x8FromInt8x16BitsJS,
778  'fromUint8x16Bits', Int16x8FromUint8x16BitsJS,
779  'load', Int16x8LoadJS,
780  'store', Int16x8StoreJS,
781]);
782
783utils.InstallFunctions(GlobalUint16x8, DONT_ENUM, [
784  'splat', Uint16x8Splat,
785  'check', Uint16x8CheckJS,
786  'extractLane', Uint16x8ExtractLaneJS,
787  'replaceLane', Uint16x8ReplaceLaneJS,
788  'add', Uint16x8AddJS,
789  'sub', Uint16x8SubJS,
790  'addSaturate', Uint16x8AddSaturateJS,
791  'subSaturate', Uint16x8SubSaturateJS,
792  'mul', Uint16x8MulJS,
793  'min', Uint16x8MinJS,
794  'max', Uint16x8MaxJS,
795  'and', Uint16x8AndJS,
796  'or', Uint16x8OrJS,
797  'xor', Uint16x8XorJS,
798  'not', Uint16x8NotJS,
799  'shiftLeftByScalar', Uint16x8ShiftLeftByScalarJS,
800  'shiftRightByScalar', Uint16x8ShiftRightByScalarJS,
801  'lessThan', Uint16x8LessThanJS,
802  'lessThanOrEqual', Uint16x8LessThanOrEqualJS,
803  'greaterThan', Uint16x8GreaterThanJS,
804  'greaterThanOrEqual', Uint16x8GreaterThanOrEqualJS,
805  'equal', Uint16x8EqualJS,
806  'notEqual', Uint16x8NotEqualJS,
807  'select', Uint16x8SelectJS,
808  'swizzle', Uint16x8SwizzleJS,
809  'shuffle', Uint16x8ShuffleJS,
810  'fromInt16x8', Uint16x8FromInt16x8JS,
811  'fromFloat32x4Bits', Uint16x8FromFloat32x4BitsJS,
812  'fromInt32x4Bits', Uint16x8FromInt32x4BitsJS,
813  'fromUint32x4Bits', Uint16x8FromUint32x4BitsJS,
814  'fromInt16x8Bits', Uint16x8FromInt16x8BitsJS,
815  'fromInt8x16Bits', Uint16x8FromInt8x16BitsJS,
816  'fromUint8x16Bits', Uint16x8FromUint8x16BitsJS,
817  'load', Uint16x8LoadJS,
818  'store', Uint16x8StoreJS,
819]);
820
821utils.InstallFunctions(GlobalBool16x8, DONT_ENUM, [
822  'splat', Bool16x8Splat,
823  'check', Bool16x8CheckJS,
824  'extractLane', Bool16x8ExtractLaneJS,
825  'replaceLane', Bool16x8ReplaceLaneJS,
826  'and', Bool16x8AndJS,
827  'or', Bool16x8OrJS,
828  'xor', Bool16x8XorJS,
829  'not', Bool16x8NotJS,
830  'anyTrue', Bool16x8AnyTrueJS,
831  'allTrue', Bool16x8AllTrueJS,
832  'swizzle', Bool16x8SwizzleJS,
833  'shuffle', Bool16x8ShuffleJS,
834]);
835
836utils.InstallFunctions(GlobalInt8x16, DONT_ENUM, [
837  'splat', Int8x16Splat,
838  'check', Int8x16CheckJS,
839  'extractLane', Int8x16ExtractLaneJS,
840  'replaceLane', Int8x16ReplaceLaneJS,
841  'neg', Int8x16NegJS,
842  'add', Int8x16AddJS,
843  'sub', Int8x16SubJS,
844  'addSaturate', Int8x16AddSaturateJS,
845  'subSaturate', Int8x16SubSaturateJS,
846  'mul', Int8x16MulJS,
847  'min', Int8x16MinJS,
848  'max', Int8x16MaxJS,
849  'and', Int8x16AndJS,
850  'or', Int8x16OrJS,
851  'xor', Int8x16XorJS,
852  'not', Int8x16NotJS,
853  'shiftLeftByScalar', Int8x16ShiftLeftByScalarJS,
854  'shiftRightByScalar', Int8x16ShiftRightByScalarJS,
855  'lessThan', Int8x16LessThanJS,
856  'lessThanOrEqual', Int8x16LessThanOrEqualJS,
857  'greaterThan', Int8x16GreaterThanJS,
858  'greaterThanOrEqual', Int8x16GreaterThanOrEqualJS,
859  'equal', Int8x16EqualJS,
860  'notEqual', Int8x16NotEqualJS,
861  'select', Int8x16SelectJS,
862  'swizzle', Int8x16SwizzleJS,
863  'shuffle', Int8x16ShuffleJS,
864  'fromUint8x16', Int8x16FromUint8x16JS,
865  'fromFloat32x4Bits', Int8x16FromFloat32x4BitsJS,
866  'fromInt32x4Bits', Int8x16FromInt32x4BitsJS,
867  'fromUint32x4Bits', Int8x16FromUint32x4BitsJS,
868  'fromInt16x8Bits', Int8x16FromInt16x8BitsJS,
869  'fromUint16x8Bits', Int8x16FromUint16x8BitsJS,
870  'fromUint8x16Bits', Int8x16FromUint8x16BitsJS,
871  'load', Int8x16LoadJS,
872  'store', Int8x16StoreJS,
873]);
874
875utils.InstallFunctions(GlobalUint8x16, DONT_ENUM, [
876  'splat', Uint8x16Splat,
877  'check', Uint8x16CheckJS,
878  'extractLane', Uint8x16ExtractLaneJS,
879  'replaceLane', Uint8x16ReplaceLaneJS,
880  'add', Uint8x16AddJS,
881  'sub', Uint8x16SubJS,
882  'addSaturate', Uint8x16AddSaturateJS,
883  'subSaturate', Uint8x16SubSaturateJS,
884  'mul', Uint8x16MulJS,
885  'min', Uint8x16MinJS,
886  'max', Uint8x16MaxJS,
887  'and', Uint8x16AndJS,
888  'or', Uint8x16OrJS,
889  'xor', Uint8x16XorJS,
890  'not', Uint8x16NotJS,
891  'shiftLeftByScalar', Uint8x16ShiftLeftByScalarJS,
892  'shiftRightByScalar', Uint8x16ShiftRightByScalarJS,
893  'lessThan', Uint8x16LessThanJS,
894  'lessThanOrEqual', Uint8x16LessThanOrEqualJS,
895  'greaterThan', Uint8x16GreaterThanJS,
896  'greaterThanOrEqual', Uint8x16GreaterThanOrEqualJS,
897  'equal', Uint8x16EqualJS,
898  'notEqual', Uint8x16NotEqualJS,
899  'select', Uint8x16SelectJS,
900  'swizzle', Uint8x16SwizzleJS,
901  'shuffle', Uint8x16ShuffleJS,
902  'fromInt8x16', Uint8x16FromInt8x16JS,
903  'fromFloat32x4Bits', Uint8x16FromFloat32x4BitsJS,
904  'fromInt32x4Bits', Uint8x16FromInt32x4BitsJS,
905  'fromUint32x4Bits', Uint8x16FromUint32x4BitsJS,
906  'fromInt16x8Bits', Uint8x16FromInt16x8BitsJS,
907  'fromUint16x8Bits', Uint8x16FromUint16x8BitsJS,
908  'fromInt8x16Bits', Uint8x16FromInt8x16BitsJS,
909  'load', Uint8x16LoadJS,
910  'store', Uint8x16StoreJS,
911]);
912
913utils.InstallFunctions(GlobalBool8x16, DONT_ENUM, [
914  'splat', Bool8x16Splat,
915  'check', Bool8x16CheckJS,
916  'extractLane', Bool8x16ExtractLaneJS,
917  'replaceLane', Bool8x16ReplaceLaneJS,
918  'and', Bool8x16AndJS,
919  'or', Bool8x16OrJS,
920  'xor', Bool8x16XorJS,
921  'not', Bool8x16NotJS,
922  'anyTrue', Bool8x16AnyTrueJS,
923  'allTrue', Bool8x16AllTrueJS,
924  'swizzle', Bool8x16SwizzleJS,
925  'shuffle', Bool8x16ShuffleJS,
926]);
927
928utils.Export(function(to) {
929  to.Float32x4ToString = Float32x4ToString;
930  to.Int32x4ToString = Int32x4ToString;
931  to.Uint32x4ToString = Uint32x4ToString;
932  to.Bool32x4ToString = Bool32x4ToString;
933  to.Int16x8ToString = Int16x8ToString;
934  to.Uint16x8ToString = Uint16x8ToString;
935  to.Bool16x8ToString = Bool16x8ToString;
936  to.Int8x16ToString = Int8x16ToString;
937  to.Uint8x16ToString = Uint8x16ToString;
938  to.Bool8x16ToString = Bool8x16ToString;
939});
940
941})
942