| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 (function(global, utils) { | 5 (function(global, utils) { |
| 6 | 6 |
| 7 "use strict"; | 7 "use strict"; |
| 8 | 8 |
| 9 %CheckIsBootstrapping(); | 9 %CheckIsBootstrapping(); |
| 10 | 10 |
| 11 // ------------------------------------------------------------------- | 11 // ------------------------------------------------------------------- |
| 12 // Imports | 12 // Imports |
| 13 | 13 |
| 14 var GlobalSIMD = global.SIMD; | 14 var GlobalSIMD = global.SIMD; |
| 15 var MakeTypeError; | |
| 16 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); | 15 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); |
| 17 | 16 |
| 18 utils.Import(function(from) { | |
| 19 MakeTypeError = from.MakeTypeError; | |
| 20 }); | |
| 21 | |
| 22 // ------------------------------------------------------------------- | 17 // ------------------------------------------------------------------- |
| 23 | 18 |
| 24 macro SIMD_FLOAT_TYPES(FUNCTION) | 19 macro SIMD_FLOAT_TYPES(FUNCTION) |
| 25 FUNCTION(Float32x4, float32x4, 4) | 20 FUNCTION(Float32x4, float32x4, 4) |
| 26 endmacro | 21 endmacro |
| 27 | 22 |
| 28 macro SIMD_INT_TYPES(FUNCTION) | 23 macro SIMD_INT_TYPES(FUNCTION) |
| 29 FUNCTION(Int32x4, int32x4, 4) | 24 FUNCTION(Int32x4, int32x4, 4) |
| 30 FUNCTION(Int16x8, int16x8, 8) | 25 FUNCTION(Int16x8, int16x8, 8) |
| 31 FUNCTION(Int8x16, int8x16, 16) | 26 FUNCTION(Int8x16, int8x16, 16) |
| (...skipping 25 matching lines...) Expand all Loading... |
| 57 SIMD_ALL_TYPES(DECLARE_GLOBALS) | 52 SIMD_ALL_TYPES(DECLARE_GLOBALS) |
| 58 | 53 |
| 59 macro DECLARE_COMMON_FUNCTIONS(NAME, TYPE, LANES) | 54 macro DECLARE_COMMON_FUNCTIONS(NAME, TYPE, LANES) |
| 60 function NAMECheckJS(a) { | 55 function NAMECheckJS(a) { |
| 61 return %NAMECheck(a); | 56 return %NAMECheck(a); |
| 62 } | 57 } |
| 63 | 58 |
| 64 function NAMEToString() { | 59 function NAMEToString() { |
| 65 var value = %ValueOf(this); | 60 var value = %ValueOf(this); |
| 66 if (typeof(value) !== 'TYPE') { | 61 if (typeof(value) !== 'TYPE') { |
| 67 throw MakeTypeError(kIncompatibleMethodReceiver, | 62 throw %make_type_error(kIncompatibleMethodReceiver, |
| 68 "NAME.prototype.toString", this); | 63 "NAME.prototype.toString", this); |
| 69 } | 64 } |
| 70 var str = "SIMD.NAME("; | 65 var str = "SIMD.NAME("; |
| 71 str += %NAMEExtractLane(value, 0); | 66 str += %NAMEExtractLane(value, 0); |
| 72 for (var i = 1; i < LANES; i++) { | 67 for (var i = 1; i < LANES; i++) { |
| 73 str += ", " + %NAMEExtractLane(value, i); | 68 str += ", " + %NAMEExtractLane(value, i); |
| 74 } | 69 } |
| 75 return str + ")"; | 70 return str + ")"; |
| 76 } | 71 } |
| 77 | 72 |
| 78 function NAMEToLocaleString() { | 73 function NAMEToLocaleString() { |
| 79 var value = %ValueOf(this); | 74 var value = %ValueOf(this); |
| 80 if (typeof(value) !== 'TYPE') { | 75 if (typeof(value) !== 'TYPE') { |
| 81 throw MakeTypeError(kIncompatibleMethodReceiver, | 76 throw %make_type_error(kIncompatibleMethodReceiver, |
| 82 "NAME.prototype.toLocaleString", this); | 77 "NAME.prototype.toLocaleString", this); |
| 83 } | 78 } |
| 84 var str = "SIMD.NAME("; | 79 var str = "SIMD.NAME("; |
| 85 str += %NAMEExtractLane(value, 0).toLocaleString(); | 80 str += %NAMEExtractLane(value, 0).toLocaleString(); |
| 86 for (var i = 1; i < LANES; i++) { | 81 for (var i = 1; i < LANES; i++) { |
| 87 str += ", " + %NAMEExtractLane(value, i).toLocaleString(); | 82 str += ", " + %NAMEExtractLane(value, i).toLocaleString(); |
| 88 } | 83 } |
| 89 return str + ")"; | 84 return str + ")"; |
| 90 } | 85 } |
| 91 | 86 |
| 92 function NAMEValueOf() { | 87 function NAMEValueOf() { |
| 93 var value = %ValueOf(this); | 88 var value = %ValueOf(this); |
| 94 if (typeof(value) !== 'TYPE') { | 89 if (typeof(value) !== 'TYPE') { |
| 95 throw MakeTypeError(kIncompatibleMethodReceiver, | 90 throw %make_type_error(kIncompatibleMethodReceiver, |
| 96 "NAME.prototype.valueOf", this); | 91 "NAME.prototype.valueOf", this); |
| 97 } | 92 } |
| 98 return value; | 93 return value; |
| 99 } | 94 } |
| 100 | 95 |
| 101 function NAMEExtractLaneJS(instance, lane) { | 96 function NAMEExtractLaneJS(instance, lane) { |
| 102 return %NAMEExtractLane(instance, lane); | 97 return %NAMEExtractLane(instance, lane); |
| 103 } | 98 } |
| 104 endmacro | 99 endmacro |
| 105 | 100 |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 c11, c12, c13, c14, c15); | 422 c11, c12, c13, c14, c15); |
| 428 } | 423 } |
| 429 endmacro | 424 endmacro |
| 430 | 425 |
| 431 SIMD_X16_TYPES(DECLARE_X16_FUNCTIONS) | 426 SIMD_X16_TYPES(DECLARE_X16_FUNCTIONS) |
| 432 | 427 |
| 433 //------------------------------------------------------------------- | 428 //------------------------------------------------------------------- |
| 434 | 429 |
| 435 function Float32x4Constructor(c0, c1, c2, c3) { | 430 function Float32x4Constructor(c0, c1, c2, c3) { |
| 436 if (!IS_UNDEFINED(new.target)) { | 431 if (!IS_UNDEFINED(new.target)) { |
| 437 throw MakeTypeError(kNotConstructor, "Float32x4"); | 432 throw %make_type_error(kNotConstructor, "Float32x4"); |
| 438 } | 433 } |
| 439 return %CreateFloat32x4(TO_NUMBER(c0), TO_NUMBER(c1), | 434 return %CreateFloat32x4(TO_NUMBER(c0), TO_NUMBER(c1), |
| 440 TO_NUMBER(c2), TO_NUMBER(c3)); | 435 TO_NUMBER(c2), TO_NUMBER(c3)); |
| 441 } | 436 } |
| 442 | 437 |
| 443 | 438 |
| 444 function Int32x4Constructor(c0, c1, c2, c3) { | 439 function Int32x4Constructor(c0, c1, c2, c3) { |
| 445 if (!IS_UNDEFINED(new.target)) { | 440 if (!IS_UNDEFINED(new.target)) { |
| 446 throw MakeTypeError(kNotConstructor, "Int32x4"); | 441 throw %make_type_error(kNotConstructor, "Int32x4"); |
| 447 } | 442 } |
| 448 return %CreateInt32x4(TO_NUMBER(c0), TO_NUMBER(c1), | 443 return %CreateInt32x4(TO_NUMBER(c0), TO_NUMBER(c1), |
| 449 TO_NUMBER(c2), TO_NUMBER(c3)); | 444 TO_NUMBER(c2), TO_NUMBER(c3)); |
| 450 } | 445 } |
| 451 | 446 |
| 452 | 447 |
| 453 function Uint32x4Constructor(c0, c1, c2, c3) { | 448 function Uint32x4Constructor(c0, c1, c2, c3) { |
| 454 if (!IS_UNDEFINED(new.target)) { | 449 if (!IS_UNDEFINED(new.target)) { |
| 455 throw MakeTypeError(kNotConstructor, "Uint32x4"); | 450 throw %make_type_error(kNotConstructor, "Uint32x4"); |
| 456 } | 451 } |
| 457 return %CreateUint32x4(TO_NUMBER(c0), TO_NUMBER(c1), | 452 return %CreateUint32x4(TO_NUMBER(c0), TO_NUMBER(c1), |
| 458 TO_NUMBER(c2), TO_NUMBER(c3)); | 453 TO_NUMBER(c2), TO_NUMBER(c3)); |
| 459 } | 454 } |
| 460 | 455 |
| 461 | 456 |
| 462 function Bool32x4Constructor(c0, c1, c2, c3) { | 457 function Bool32x4Constructor(c0, c1, c2, c3) { |
| 463 if (!IS_UNDEFINED(new.target)) { | 458 if (!IS_UNDEFINED(new.target)) { |
| 464 throw MakeTypeError(kNotConstructor, "Bool32x4"); | 459 throw %make_type_error(kNotConstructor, "Bool32x4"); |
| 465 } | 460 } |
| 466 return %CreateBool32x4(c0, c1, c2, c3); | 461 return %CreateBool32x4(c0, c1, c2, c3); |
| 467 } | 462 } |
| 468 | 463 |
| 469 | 464 |
| 470 function Int16x8Constructor(c0, c1, c2, c3, c4, c5, c6, c7) { | 465 function Int16x8Constructor(c0, c1, c2, c3, c4, c5, c6, c7) { |
| 471 if (!IS_UNDEFINED(new.target)) { | 466 if (!IS_UNDEFINED(new.target)) { |
| 472 throw MakeTypeError(kNotConstructor, "Int16x8"); | 467 throw %make_type_error(kNotConstructor, "Int16x8"); |
| 473 } | 468 } |
| 474 return %CreateInt16x8(TO_NUMBER(c0), TO_NUMBER(c1), | 469 return %CreateInt16x8(TO_NUMBER(c0), TO_NUMBER(c1), |
| 475 TO_NUMBER(c2), TO_NUMBER(c3), | 470 TO_NUMBER(c2), TO_NUMBER(c3), |
| 476 TO_NUMBER(c4), TO_NUMBER(c5), | 471 TO_NUMBER(c4), TO_NUMBER(c5), |
| 477 TO_NUMBER(c6), TO_NUMBER(c7)); | 472 TO_NUMBER(c6), TO_NUMBER(c7)); |
| 478 } | 473 } |
| 479 | 474 |
| 480 | 475 |
| 481 function Uint16x8Constructor(c0, c1, c2, c3, c4, c5, c6, c7) { | 476 function Uint16x8Constructor(c0, c1, c2, c3, c4, c5, c6, c7) { |
| 482 if (!IS_UNDEFINED(new.target)) { | 477 if (!IS_UNDEFINED(new.target)) { |
| 483 throw MakeTypeError(kNotConstructor, "Uint16x8"); | 478 throw %make_type_error(kNotConstructor, "Uint16x8"); |
| 484 } | 479 } |
| 485 return %CreateUint16x8(TO_NUMBER(c0), TO_NUMBER(c1), | 480 return %CreateUint16x8(TO_NUMBER(c0), TO_NUMBER(c1), |
| 486 TO_NUMBER(c2), TO_NUMBER(c3), | 481 TO_NUMBER(c2), TO_NUMBER(c3), |
| 487 TO_NUMBER(c4), TO_NUMBER(c5), | 482 TO_NUMBER(c4), TO_NUMBER(c5), |
| 488 TO_NUMBER(c6), TO_NUMBER(c7)); | 483 TO_NUMBER(c6), TO_NUMBER(c7)); |
| 489 } | 484 } |
| 490 | 485 |
| 491 | 486 |
| 492 function Bool16x8Constructor(c0, c1, c2, c3, c4, c5, c6, c7) { | 487 function Bool16x8Constructor(c0, c1, c2, c3, c4, c5, c6, c7) { |
| 493 if (!IS_UNDEFINED(new.target)) { | 488 if (!IS_UNDEFINED(new.target)) { |
| 494 throw MakeTypeError(kNotConstructor, "Bool16x8"); | 489 throw %make_type_error(kNotConstructor, "Bool16x8"); |
| 495 } | 490 } |
| 496 return %CreateBool16x8(c0, c1, c2, c3, c4, c5, c6, c7); | 491 return %CreateBool16x8(c0, c1, c2, c3, c4, c5, c6, c7); |
| 497 } | 492 } |
| 498 | 493 |
| 499 | 494 |
| 500 function Int8x16Constructor(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, | 495 function Int8x16Constructor(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, |
| 501 c12, c13, c14, c15) { | 496 c12, c13, c14, c15) { |
| 502 if (!IS_UNDEFINED(new.target)) { | 497 if (!IS_UNDEFINED(new.target)) { |
| 503 throw MakeTypeError(kNotConstructor, "Int8x16"); | 498 throw %make_type_error(kNotConstructor, "Int8x16"); |
| 504 } | 499 } |
| 505 return %CreateInt8x16(TO_NUMBER(c0), TO_NUMBER(c1), | 500 return %CreateInt8x16(TO_NUMBER(c0), TO_NUMBER(c1), |
| 506 TO_NUMBER(c2), TO_NUMBER(c3), | 501 TO_NUMBER(c2), TO_NUMBER(c3), |
| 507 TO_NUMBER(c4), TO_NUMBER(c5), | 502 TO_NUMBER(c4), TO_NUMBER(c5), |
| 508 TO_NUMBER(c6), TO_NUMBER(c7), | 503 TO_NUMBER(c6), TO_NUMBER(c7), |
| 509 TO_NUMBER(c8), TO_NUMBER(c9), | 504 TO_NUMBER(c8), TO_NUMBER(c9), |
| 510 TO_NUMBER(c10), TO_NUMBER(c11), | 505 TO_NUMBER(c10), TO_NUMBER(c11), |
| 511 TO_NUMBER(c12), TO_NUMBER(c13), | 506 TO_NUMBER(c12), TO_NUMBER(c13), |
| 512 TO_NUMBER(c14), TO_NUMBER(c15)); | 507 TO_NUMBER(c14), TO_NUMBER(c15)); |
| 513 } | 508 } |
| 514 | 509 |
| 515 | 510 |
| 516 function Uint8x16Constructor(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, | 511 function Uint8x16Constructor(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, |
| 517 c12, c13, c14, c15) { | 512 c12, c13, c14, c15) { |
| 518 if (!IS_UNDEFINED(new.target)) { | 513 if (!IS_UNDEFINED(new.target)) { |
| 519 throw MakeTypeError(kNotConstructor, "Uint8x16"); | 514 throw %make_type_error(kNotConstructor, "Uint8x16"); |
| 520 } | 515 } |
| 521 return %CreateUint8x16(TO_NUMBER(c0), TO_NUMBER(c1), | 516 return %CreateUint8x16(TO_NUMBER(c0), TO_NUMBER(c1), |
| 522 TO_NUMBER(c2), TO_NUMBER(c3), | 517 TO_NUMBER(c2), TO_NUMBER(c3), |
| 523 TO_NUMBER(c4), TO_NUMBER(c5), | 518 TO_NUMBER(c4), TO_NUMBER(c5), |
| 524 TO_NUMBER(c6), TO_NUMBER(c7), | 519 TO_NUMBER(c6), TO_NUMBER(c7), |
| 525 TO_NUMBER(c8), TO_NUMBER(c9), | 520 TO_NUMBER(c8), TO_NUMBER(c9), |
| 526 TO_NUMBER(c10), TO_NUMBER(c11), | 521 TO_NUMBER(c10), TO_NUMBER(c11), |
| 527 TO_NUMBER(c12), TO_NUMBER(c13), | 522 TO_NUMBER(c12), TO_NUMBER(c13), |
| 528 TO_NUMBER(c14), TO_NUMBER(c15)); | 523 TO_NUMBER(c14), TO_NUMBER(c15)); |
| 529 } | 524 } |
| 530 | 525 |
| 531 | 526 |
| 532 function Bool8x16Constructor(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, | 527 function Bool8x16Constructor(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, |
| 533 c12, c13, c14, c15) { | 528 c12, c13, c14, c15) { |
| 534 if (!IS_UNDEFINED(new.target)) { | 529 if (!IS_UNDEFINED(new.target)) { |
| 535 throw MakeTypeError(kNotConstructor, "Bool8x16"); | 530 throw %make_type_error(kNotConstructor, "Bool8x16"); |
| 536 } | 531 } |
| 537 return %CreateBool8x16(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, | 532 return %CreateBool8x16(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, |
| 538 c13, c14, c15); | 533 c13, c14, c15); |
| 539 } | 534 } |
| 540 | 535 |
| 541 | 536 |
| 542 function Float32x4AbsJS(a) { | 537 function Float32x4AbsJS(a) { |
| 543 return %Float32x4Abs(a); | 538 return %Float32x4Abs(a); |
| 544 } | 539 } |
| 545 | 540 |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 919 'or', Bool8x16OrJS, | 914 'or', Bool8x16OrJS, |
| 920 'xor', Bool8x16XorJS, | 915 'xor', Bool8x16XorJS, |
| 921 'not', Bool8x16NotJS, | 916 'not', Bool8x16NotJS, |
| 922 'anyTrue', Bool8x16AnyTrueJS, | 917 'anyTrue', Bool8x16AnyTrueJS, |
| 923 'allTrue', Bool8x16AllTrueJS, | 918 'allTrue', Bool8x16AllTrueJS, |
| 924 'swizzle', Bool8x16SwizzleJS, | 919 'swizzle', Bool8x16SwizzleJS, |
| 925 'shuffle', Bool8x16ShuffleJS, | 920 'shuffle', Bool8x16ShuffleJS, |
| 926 ]); | 921 ]); |
| 927 | 922 |
| 928 }) | 923 }) |
| OLD | NEW |