testSplat.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft Corporation and contributors. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. this.WScript.LoadScriptFile("..\\UnitTestFramework\\SimdJsHelpers.js");
  6. function asmModule(stdlib, imports) {
  7. "use asm";
  8. var ui16 = stdlib.SIMD.Uint8x16;
  9. var ui16check = ui16.check;
  10. var ui16splat = ui16.splat;
  11. var globImportui16 = ui16check(imports.g1); // global var import
  12. var ui16g1 = ui16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
  13. var gval = 20;
  14. var loopCOUNT = 3;
  15. var i16 = stdlib.SIMD.Int8x16;
  16. var i16check = i16.check;
  17. var i16fu16 = i16.fromUint8x16Bits;
  18. function splat1()
  19. {
  20. var a = ui16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  21. var loopIndex = 0;
  22. while ((loopIndex | 0) < (loopCOUNT | 0)) {
  23. a = ui16splat(255);
  24. loopIndex = (loopIndex + 1) | 0;
  25. }
  26. return i16check(i16fu16(a));
  27. }
  28. function splat2()
  29. {
  30. var a = ui16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  31. var loopIndex = 0;
  32. while ((loopIndex | 0) < (loopCOUNT | 0)) {
  33. a = ui16splat(value() | 0);
  34. loopIndex = (loopIndex + 1) | 0;
  35. }
  36. return i16check(i16fu16(a));
  37. }
  38. function splat3()
  39. {
  40. var a = ui16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  41. var loopIndex = 0;
  42. while ((loopIndex | 0) < (loopCOUNT | 0)) {
  43. a = ui16splat(gval);
  44. loopIndex = (loopIndex + 1) | 0;
  45. }
  46. return i16check(i16fu16(a));
  47. }
  48. function value()
  49. {
  50. var ret = 1;
  51. var i = 0;
  52. for (i = 0; (i | 0) < 100; i = (i + 1) | 0)
  53. ret = (ret + i) | 0;
  54. return ret | 0;
  55. }
  56. return {func1:splat1, func2:splat2, func3:splat3};
  57. }
  58. var m = asmModule(this, {g1:SIMD.Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)});
  59. var ret1 = SIMD.Uint8x16.fromInt8x16Bits(m.func1(SIMD.Uint8x16(1, 2, 3, 4, 5, 6, 7, 8), SIMD.Float32x4(1, 2, 3, 4)/*, SIMD.Float64x2(1, 2, 3, 4)*/));
  60. var ret2 = SIMD.Uint8x16.fromInt8x16Bits(m.func2(SIMD.Uint8x16(1, 2, 3, 4, 5, 6, 7, 8), SIMD.Float32x4(1, 2, 3, 4)/*, SIMD.Float64x2(1, 2, 3, 4)*/));
  61. var ret3 = SIMD.Uint8x16.fromInt8x16Bits(m.func3(SIMD.Uint8x16(1, 2, 3, 4, 5, 6, 7, 8), SIMD.Float32x4(1, 2, 3, 4)/*, SIMD.Float64x2(1, 2, 3, 4)*/));
  62. equalSimd([255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], ret1, SIMD.Uint8x16, "");
  63. equalSimd([87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87], ret2, SIMD.Uint8x16, "");
  64. equalSimd([20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20], ret3, SIMD.Uint8x16, "");
  65. print("PASS");