testConstructor.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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 b16 = stdlib.SIMD.Bool8x16;
  9. var i16 = stdlib.SIMD.Int8x16;
  10. var i16lessThan = i16.lessThan;
  11. var b16check = b16.check;
  12. var b16splat = b16.splat;
  13. var b16and = b16.and;
  14. var b16xor = b16.xor;
  15. var b16extractLane = b16.extractLane;
  16. var b16replaceLane = b16.replaceLane;
  17. var globImportb16 = b16check(imports.g1);
  18. var b16g1 = b16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  19. var loopCOUNT = 5;
  20. function testConstructor() {
  21. var a = b16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  22. var b = b16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  23. var i1 = i16(1, 0, 1, 8, 1, 0, 1, 8, 1, 0, 1, 8, 1, 0, 1, 8);
  24. var i2 = i16(12,13,0, 1, 12,13,0, 1, 12,13,0, 1, 12,13,0, 1);
  25. var loopIndex = 0;
  26. while ((loopIndex | 0) < (loopCOUNT | 0)) {
  27. loopIndex = (loopIndex + 1) | 0;
  28. a = b16(10*10,0,-1,loopIndex, 10*10,0,-1,loopIndex, 10*10,0,-1,loopIndex, 10*10,0,-1,loopIndex);
  29. b = i16lessThan(i1,i2);
  30. a = b16and(a, b);
  31. }
  32. return b16check(a);
  33. }
  34. function testSplat() {
  35. var a = b16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  36. var b = b16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  37. var loopIndex = 0;
  38. while ((loopIndex | 0) < (loopCOUNT | 0)) {
  39. loopIndex = (loopIndex + 1) | 0;
  40. a = b16splat(3);
  41. b = b16splat((3-3));
  42. a = b16xor(a, b);
  43. }
  44. return b16check(a);
  45. }
  46. function testLaneAccess() {
  47. var a = b16(5, 0, -10, 0, 10, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0);
  48. var result = b16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  49. var m = 0;
  50. var n = 0;
  51. var o = 0;
  52. var p = 0;
  53. var m1 = 0;
  54. var n1 = 0;
  55. var o1 = 0;
  56. var p1 = 0;
  57. var m2 = 0;
  58. var n2 = 0;
  59. var o2 = 0;
  60. var p2 = 0;
  61. var m3 = 0;
  62. var n3 = 0;
  63. var o3 = 0;
  64. var p3 = 0;
  65. var loopIndex = 0;
  66. while ((loopIndex | 0) < (loopCOUNT | 0)) {
  67. loopIndex = (loopIndex + 1) | 0;
  68. m = b16extractLane(a, 0)|0;
  69. n = b16extractLane(a, 1)|0;
  70. o = b16extractLane(a, 2)|0;
  71. p = b16extractLane(a, 3)|0;
  72. m1 = b16extractLane(a, 4)|0;
  73. n1 = b16extractLane(a, 5)|0;
  74. o1 = b16extractLane(a, 6)|0;
  75. p1 = b16extractLane(a, 7)|0;
  76. m2 = b16extractLane(a, 8)|0;
  77. n2 = b16extractLane(a, 9)|0;
  78. o2 = b16extractLane(a, 10)|0;
  79. p2 = b16extractLane(a, 11)|0;
  80. m3 = b16extractLane(a, 12)|0;
  81. n3 = b16extractLane(a, 13)|0;
  82. o3 = b16extractLane(a, 14)|0;
  83. p3 = b16extractLane(a, 15)|0;
  84. result = b16replaceLane(result, 0, p3);
  85. result = b16replaceLane(result, 1, o3);
  86. result = b16replaceLane(result, 2, n3);
  87. result = b16replaceLane(result, 3, m3);
  88. result = b16replaceLane(result, 4, p2);
  89. result = b16replaceLane(result, 5, o2);
  90. result = b16replaceLane(result, 6, n2)
  91. result = b16replaceLane(result, 7, m2);
  92. result = b16replaceLane(result, 8, p1);
  93. result = b16replaceLane(result, 9, o1);
  94. result = b16replaceLane(result, 10, n1);
  95. result = b16replaceLane(result, 11, m1);
  96. result = b16replaceLane(result, 12, p);
  97. result = b16replaceLane(result, 13, o);
  98. result = b16replaceLane(result, 14, n);
  99. result = b16replaceLane(result, 15, m);
  100. result = b16(p, m, o, n, p1, m1, o1, n1, p2, m2, o2, n2, p3, m3, o3, n3);
  101. }
  102. return b16check(result);
  103. }
  104. //Validation will fail with the bug
  105. function retValueCoercionBug()
  106. {
  107. var ret1 = 0;
  108. var a = b16(1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8);
  109. ret1 = (b16extractLane(a, 0))|0;
  110. }
  111. return {testConstructor:testConstructor,
  112. testSplat:testSplat,
  113. testLaneAccess: testLaneAccess};
  114. }
  115. var m = asmModule(this, {g1:SIMD.Bool8x16(1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1)});
  116. equalSimd([true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false], m.testConstructor(), SIMD.Bool8x16, "testConstructor");
  117. equalSimd([true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true], m.testSplat(), SIMD.Bool8x16, "testSplat");
  118. equalSimd([false, true, true, false, false, true, true, false, false, true, true, false, false, true, true, false], m.testLaneAccess(), SIMD.Bool8x16, "testLaneAccess");
  119. // WScript.Echo((m.testConstructor().toString()));
  120. // WScript.Echo((m.testSplat().toString()));
  121. // WScript.Echo((m.testLaneAccess().toString()));
  122. print("PASS");