testBools.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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 b4 = stdlib.SIMD.Bool32x4;
  9. var b8 = stdlib.SIMD.Bool16x8;
  10. var b16 = stdlib.SIMD.Bool8x16;
  11. var b4check = b4.check;
  12. var b8check = b8.check;
  13. var b16check = b16.check;
  14. var b4and = b4.and;
  15. var b8and = b8.and;
  16. var b16and = b16.and;
  17. var b4or = b4.or;
  18. var b8or = b8.or;
  19. var b16or= b16.or;
  20. var b4xor = b4.xor;
  21. var b8xor = b8.xor;
  22. var b16xor= b16.xor;
  23. var b4not = b4.not;
  24. var b8not = b8.not;
  25. var b16not = b16.not;
  26. var b4allTrue = b4.allTrue;
  27. var b8allTrue = b8.allTrue;
  28. var b16allTrue = b16.allTrue;
  29. var b4anyTrue = b4.anyTrue;
  30. var b8anyTrue = b8.anyTrue;
  31. var b16anyTrue = b16.anyTrue;
  32. var g1 = b4(1,1,0,1);
  33. var g2 = b8(1,1,0,1,1,1,0,1);
  34. var g3 = b16(1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1);
  35. function and1(a)
  36. {
  37. a = a | 0;
  38. var b = b4(0,5,0,0);
  39. b = b4and(b,g1);
  40. return b4check(b);
  41. }
  42. function and2(a)
  43. { a = a | 0; var b = b8(0,5,0,0,0,5,0,0);
  44. b = b8and(b,g2);
  45. return b8check(b);
  46. }
  47. function and3(a)
  48. { a = a | 0; var b = b16(0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0);
  49. b = b16and(b,g3);
  50. return b16check(b); }
  51. function or1(a)
  52. { a = a | 0; var b = b4(0,5,0,0);
  53. b = b4or(b,g1); return b4check(b); }
  54. function or2(a)
  55. { a = a | 0; var b = b8(0,5,0,0,0,5,0,0);
  56. b = b8or(b,g2); return b8check(b); }
  57. function or3(a)
  58. { a = a | 0; var b = b16(0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0);
  59. b = b16or(b,g3);
  60. return b16check(b); }
  61. function xor1(a)
  62. { a = a | 0; var b = b4(0,5,0,0);
  63. b = b4xor(b,g1); return b4check(b); }
  64. function xor2(a)
  65. { a = a | 0; var b = b8(0,5,0,0,0,5,0,0);
  66. b = b8xor(b,g2); return b8check(b); }
  67. function xor3(a)
  68. { a = a | 0; var b = b16(0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0);
  69. b = b16xor(b,g3);
  70. return b16check(b); }
  71. function not1(a)
  72. { a = a | 0; var b = b4(0,5,0,0);
  73. b = b4not(b); return b4check(b); }
  74. function not2(a)
  75. { a = a | 0; var b = b8(0,5,0,0,0,5,0,0);
  76. b = b8not(b); return b8check(b); }
  77. function not3(a)
  78. { a = a | 0; var b = b16(0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0);
  79. b = b16not(b);
  80. return b16check(b); }
  81. function allTrue1(a)
  82. { a = a | 0;
  83. var b1 = b4(0,5,0,0);
  84. var b2 = b4(-2, 2, 1, 3);
  85. var x = 0;
  86. x = ((b4allTrue(b1) | 0) + (b4allTrue(b2) | 0)) | 0;
  87. return x | 0;
  88. }
  89. function allTrue2(a)
  90. { a = a | 0;
  91. var b1 = b8(0,5,0,0,1,5,0,1);
  92. var b2 = b8(1,5,3,1,0,5,-100,0);
  93. b1 = b8or(b1, b2);
  94. return b8allTrue( b1) | 0;
  95. }
  96. function allTrue3(a)
  97. { a = a | 0; var b = b16(0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0);
  98. return b16allTrue(b)| 0; }
  99. function anyTrue1(a)
  100. { a = a | 0; var b = b4(0,5,0,0);
  101. return b4anyTrue(b) | 0; }
  102. function anyTrue2(a)
  103. { a = a | 0; var b = b8(0,5,0,0,0,5,0,0);
  104. return b8anyTrue(b) | 0; }
  105. function anyTrue3(a)
  106. { a = a | 0; var b = b16(0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0);
  107. return b16anyTrue(b) | 0; }
  108. return {
  109. and1: and1,
  110. and2: and2,
  111. and3: and3,
  112. or1: or1,
  113. or2: or2,
  114. or3: or3,
  115. xor1: xor1,
  116. xor2: xor2,
  117. xor3: xor3,
  118. not1: not1,
  119. not2: not2,
  120. not3: not3,
  121. allTrue1: allTrue1,
  122. allTrue2: allTrue2,
  123. allTrue3: allTrue3,
  124. anyTrue1: anyTrue1,
  125. anyTrue2: anyTrue2,
  126. anyTrue3: anyTrue3
  127. };
  128. }
  129. var m = asmModule(this, {g1:SIMD.Int8x16(0, 1, 2, 3, 4, 5, -6, -7, -8, 9, 10, 11, 12, 13, 14, 15)});
  130. var b4 = SIMD.Bool32x4;
  131. var b8 = SIMD.Bool16x8;
  132. var b16 = SIMD.Bool8x16;
  133. var ret1 = m.and1(1);
  134. var ret2 = m.and2(1);
  135. var ret3 = m.and3(1);
  136. var ret4 = m.or1(1);
  137. var ret5 = m.or2(1);
  138. var ret6 = m.or3(1);
  139. var ret7 = m.xor1(1);
  140. var ret8 = m.xor2(1);
  141. var ret9 = m.xor3(1);
  142. var ret10 = m.not1(1);
  143. var ret11 = m.not2(1);
  144. var ret12 = m.not3(1);
  145. var ret13 = m.allTrue1(1);
  146. var ret14 = m.allTrue2(1);
  147. var ret15 = m.allTrue3(1);
  148. var ret16 = m.anyTrue1(1);
  149. var ret17 = m.anyTrue2(1);
  150. var ret18 = m.anyTrue3(1);
  151. /*
  152. printSimdBaseline(ret1, "SIMD.Bool32x4", "ret1", "and1");
  153. printSimdBaseline(ret2, "SIMD.Bool16x8", "ret2", "and2");
  154. printSimdBaseline(ret3, "SIMD.Bool8x16", "ret3", "and3");
  155. printSimdBaseline(ret4, "SIMD.Bool32x4", "ret4", "or1");
  156. printSimdBaseline(ret6, "SIMD.Bool8x16", "ret6", "or3");
  157. printSimdBaseline(ret5, "SIMD.Bool16x8", "ret5", "or2");
  158. printSimdBaseline(ret7, "SIMD.Bool32x4", "ret7", "xor1");
  159. printSimdBaseline(ret8, "SIMD.Bool16x8", "ret8", "xor2");
  160. printSimdBaseline(ret9, "SIMD.Bool8x16", "ret9", "xor3");
  161. printSimdBaseline(ret10, "SIMD.Bool32x4", "ret10", "not1");
  162. printSimdBaseline(ret11, "SIMD.Bool16x8", "ret11", "not2");
  163. printSimdBaseline(ret12, "SIMD.Bool8x16", "ret12", "not3");
  164. print(ret13);
  165. print(ret14);
  166. print(ret15);
  167. print(ret16);
  168. print(ret17);
  169. print(ret18);
  170. */
  171. equalSimd([false, true, false, false], ret1, SIMD.Bool32x4, "and1")
  172. equalSimd([false, true, false, false, false, true, false, false], ret2, SIMD.Bool16x8, "and2")
  173. equalSimd([false, true, false, false, false, true, false, false, false, true, false, false, false, true, false, false], ret3, SIMD.Bool8x16, "and3")
  174. equalSimd([true, true, false, true], ret4, SIMD.Bool32x4, "or1")
  175. equalSimd([true, true, false, true, true, true, false, true, true, true, false, true, true, true, false, true], ret6, SIMD.Bool8x16, "or3")
  176. equalSimd([true, true, false, true, true, true, false, true], ret5, SIMD.Bool16x8, "or2")
  177. equalSimd([true, false, false, true], ret7, SIMD.Bool32x4, "xor1")
  178. equalSimd([true, false, false, true, true, false, false, true], ret8, SIMD.Bool16x8, "xor2")
  179. equalSimd([true, false, false, true, true, false, false, true, true, false, false, true, true, false, false, true], ret9, SIMD.Bool8x16, "xor3")
  180. equalSimd([true, false, true, true], ret10, SIMD.Bool32x4, "not1")
  181. equalSimd([true, false, true, true, true, false, true, true], ret11, SIMD.Bool16x8, "not2")
  182. equalSimd([true, false, true, true, true, false, true, true, true, false, true, true, true, false, true, true], ret12, SIMD.Bool8x16, "not3")
  183. equal(ret13, 1);
  184. equal(ret14, 1);
  185. equal(ret15, 0);
  186. equal(ret16, 1);
  187. equal(ret17, 1);
  188. equal(ret18, 1);
  189. print("PASS");