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