testComparison.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. 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 i4 = stdlib.SIMD.Int32x4;
  9. var i4check = i4.check;
  10. var i4splat = i4.splat;
  11. var i4fromFloat64x2 = i4.fromFloat64x2;
  12. var i4fromFloat64x2Bits = i4.fromFloat64x2Bits;
  13. var i4fromFloat32x4 = i4.fromFloat32x4;
  14. var i4fromFloat32x4Bits = i4.fromFloat32x4Bits;
  15. var i4neg = i4.neg;
  16. var i4add = i4.add;
  17. var i4sub = i4.sub;
  18. var i4mul = i4.mul;
  19. var i4lessThan = i4.lessThan;
  20. var i4equal = i4.equal;
  21. var i4greaterThan = i4.greaterThan;
  22. var i4select = i4.select;
  23. var i4and = i4.and;
  24. var i4or = i4.or;
  25. var i4xor = i4.xor;
  26. var i4not = i4.not;
  27. var f4 = stdlib.SIMD.Float32x4;
  28. var f4check = f4.check;
  29. var f4splat = f4.splat;
  30. var f4fromFloat64x2 = f4.fromFloat64x2;
  31. var f4fromFloat64x2Bits = f4.fromFloat64x2Bits;
  32. var f4fromInt32x4 = f4.fromInt32x4;
  33. var f4fromInt32x4Bits = f4.fromInt32x4Bits;
  34. var f4abs = f4.abs;
  35. var f4neg = f4.neg;
  36. var f4add = f4.add;
  37. var f4sub = f4.sub;
  38. var f4mul = f4.mul;
  39. var f4div = f4.div;
  40. var f4clamp = f4.clamp;
  41. var f4min = f4.min;
  42. var f4max = f4.max;
  43. var f4sqrt = f4.sqrt;
  44. var f4lessThan = f4.lessThan;
  45. var f4lessThanOrEqual = f4.lessThanOrEqual;
  46. var f4equal = f4.equal;
  47. var f4notEqual = f4.notEqual;
  48. var f4greaterThan = f4.greaterThan;
  49. var f4greaterThanOrEqual = f4.greaterThanOrEqual;
  50. var f4select = f4.select;
  51. var f4and = f4.and;
  52. var f4or = f4.or;
  53. var f4xor = f4.xor;
  54. var f4not = f4.not;
  55. var d2 = stdlib.SIMD.Float64x2;
  56. var d2check = d2.check;
  57. var d2splat = d2.splat;
  58. var d2fromFloat32x4 = d2.fromFloat32x4;
  59. var d2fromFloat32x4Bits = d2.fromFloat32x4Bits;
  60. var d2fromInt32x4 = d2.fromInt32x4;
  61. var d2fromInt32x4Bits = d2.fromInt32x4Bits;
  62. var d2abs = d2.abs;
  63. var d2neg = d2.neg;
  64. var d2add = d2.add;
  65. var d2sub = d2.sub;
  66. var d2mul = d2.mul;
  67. var d2div = d2.div;
  68. var d2clamp = d2.clamp;
  69. var d2min = d2.min;
  70. var d2max = d2.max;
  71. var d2sqrt = d2.sqrt;
  72. //var d2swizzle = d2.swizzle;
  73. //var d2shuffle = d2.shuffle;
  74. var d2lessThan = d2.lessThan;
  75. var d2lessThanOrEqual = d2.lessThanOrEqual;
  76. var d2equal = d2.equal;
  77. var d2notEqual = d2.notEqual;
  78. var d2greaterThan = d2.greaterThan;
  79. var d2greaterThanOrEqual = d2.greaterThanOrEqual;
  80. var d2select = d2.select;
  81. var fround = stdlib.Math.fround;
  82. var globImportF4 = f4check(imports.g1); // global var import
  83. var globImportI4 = i4check(imports.g2); // global var import
  84. var globImportD2 = d2check(imports.g3); // global var import
  85. var f4g1 = f4(-5033.2,-3401.0,665.34,32234.1); // global var initialized
  86. var f4g2 = f4(1194580.33,-11201.5,63236.93,334.8); // global var initialized
  87. var i4g1 = i4(1065353216, -1073741824, -1077936128, 1082130432); // global var initialized
  88. var i4g2 = i4(353216, -492529, -1128, 1085); // global var initialized
  89. var d2g1 = d2(0.12344,-1.6578); // global var initialized
  90. var d2g2 = d2(5455.4395,-100324.688); // global var initialized
  91. var gval = 1234;
  92. var gval2 = 1234.0;
  93. var loopCOUNT = 3;
  94. function func1(a)
  95. {
  96. a = a|0;
  97. var b = f4(5033.2,-3401.0,665.34,-32234.1);
  98. var c = f4(-34183.8985, 212344.12, 665.34, 65534.99);
  99. var d = i4(0,0,0,0);
  100. var loopIndex = 0;
  101. while ( (loopIndex|0) < (loopCOUNT|0)) {
  102. if ((a|0) == 0)
  103. {
  104. d = f4lessThan(b, c);
  105. } else if ((a|0) == 1)
  106. {
  107. d = f4lessThanOrEqual(b, c);
  108. } else if ((a|0) == 2)
  109. {
  110. d = f4equal(b, c);
  111. } else if ((a|0) == 3)
  112. {
  113. d = f4notEqual(b, c);
  114. } else if ((a|0) == 4)
  115. {
  116. d = f4greaterThanOrEqual(b, c);
  117. } else if ((a|0) == 5)
  118. {
  119. d = f4greaterThan(b, c);
  120. }
  121. loopIndex = (loopIndex + 1) | 0;
  122. }
  123. return i4check(d);
  124. }
  125. function func2(a)
  126. {
  127. a = a|0;
  128. var b = f4(5033.2,-3401.0,665.34,-32234.1);
  129. var c = f4(-34183.8985, 212344.12, -569437.0, 65534.99);
  130. var d = i4(0,0,0,0);
  131. var loopIndex = 0;
  132. for (loopIndex = 0; (loopIndex | 0) < (loopCOUNT | 0) ; loopIndex = (loopIndex + 1) | 0)
  133. {
  134. if ((a|0) == 0)
  135. {
  136. d = f4lessThan(f4g1, f4g2);
  137. } else if ((a|0) == 1)
  138. {
  139. d = f4lessThanOrEqual(f4g1, f4g2);
  140. } else if ((a|0) == 2)
  141. {
  142. d = f4equal(f4g1, f4g2);
  143. } else if ((a|0) == 3)
  144. {
  145. d = f4notEqual(f4g1, f4g2);
  146. } else if ((a|0) == 4)
  147. {
  148. d = f4greaterThanOrEqual(f4g1, f4g2);
  149. } else if ((a|0) == 5)
  150. {
  151. d = f4greaterThan(f4g1, f4g2);
  152. }
  153. }
  154. return i4check(d);
  155. }
  156. function func3(a)
  157. {
  158. a = a|0;
  159. var b = f4(5033.2,-3401.0,665.34,-32234.1);
  160. var c = f4(-34183.8985, 212344.12, -569437.0, 65534.99);
  161. var d = f4(0.0, 0.0, 0.0, 0.0);
  162. var loopIndex = 0;
  163. loopIndex = loopCOUNT | 0;
  164. do {
  165. if ((a|0) == 0)
  166. {
  167. globImportI4 = f4lessThan(globImportF4, f4g2);
  168. } else if ((a|0) == 1)
  169. {
  170. globImportI4 = f4lessThanOrEqual(globImportF4, f4g2);
  171. } else if ((a|0) == 2)
  172. {
  173. globImportI4 = f4equal(globImportF4, f4g2);
  174. } else if ((a|0) == 3)
  175. {
  176. globImportI4 = f4notEqual(globImportF4, f4g2);
  177. } else if ((a|0) == 4)
  178. {
  179. globImportI4 = f4greaterThanOrEqual(globImportF4, f4g2);
  180. } else if ((a|0) == 5)
  181. {
  182. globImportI4 = f4greaterThan(globImportF4, f4g2);
  183. }
  184. loopIndex = (loopIndex - 1) | 0;
  185. }
  186. while ( (loopIndex | 0) > 0);
  187. return i4check(globImportI4);
  188. }
  189. return {func1:func1, func2:func2, func3:func3};
  190. }
  191. var m = asmModule(this, {g1:SIMD.Float32x4(90934.2,123.9,419.39,449.0), g2:SIMD.Int32x4(-1065353216, -1073741824,-1077936128, -1082130432), g3:SIMD.Float64x2(110.20, 58967.0, 14511.670, 191766.23431)});
  192. var ret;
  193. ret = m.func1(0);
  194. equalSimd([0, -1, 0, -1], ret, SIMD.Int32x4, "Test comparison");
  195. ret = m.func1(1);
  196. equalSimd([0, -1, -1, -1], ret, SIMD.Int32x4, "Test comparison");
  197. ret = m.func1(2);
  198. equalSimd([0, 0, -1, 0], ret, SIMD.Int32x4, "Test comparison");
  199. ret = m.func1(3);
  200. equalSimd([-1, -1, 0, -1], ret, SIMD.Int32x4, "Test comparison");
  201. ret = m.func1(4);
  202. equalSimd([-1, 0, -1, 0], ret, SIMD.Int32x4, "Test comparison");
  203. ret = m.func1(5);
  204. equalSimd([-1, 0, 0, 0], ret, SIMD.Int32x4, "Test comparison");
  205. ret = m.func2(0);
  206. equalSimd([-1, 0, -1, 0], ret, SIMD.Int32x4, "Test comparison");
  207. ret = m.func2(1);
  208. equalSimd([-1, 0, -1, 0], ret, SIMD.Int32x4, "Test comparison");
  209. ret = m.func2(2);
  210. equalSimd([0, 0, 0, 0], ret, SIMD.Int32x4, "Test comparison");
  211. ret = m.func2(3);
  212. equalSimd([-1, -1, -1, -1], ret, SIMD.Int32x4, "Test comparison");
  213. ret = m.func2(4);
  214. equalSimd([0, -1, 0, -1], ret, SIMD.Int32x4, "Test comparison");
  215. ret = m.func2(5);
  216. equalSimd([0, -1, 0, -1], ret, SIMD.Int32x4, "Test comparison");
  217. ret = m.func3(0);
  218. equalSimd([-1, 0, -1, 0], ret, SIMD.Int32x4, "Test comparison");
  219. ret = m.func3(1);
  220. equalSimd([-1, 0, -1, 0], ret, SIMD.Int32x4, "Test comparison");
  221. ret = m.func3(2);
  222. equalSimd([0, 0, 0, 0], ret, SIMD.Int32x4, "Test comparison");
  223. ret = m.func3(3);
  224. equalSimd([-1, -1, -1, -1], ret, SIMD.Int32x4, "Test comparison");
  225. ret = m.func3(4);
  226. equalSimd([0, -1, 0, -1], ret, SIMD.Int32x4, "Test comparison");
  227. ret = m.func3(5);
  228. equalSimd([0, -1, 0, -1], ret, SIMD.Int32x4, "Test comparison");
  229. print("PASS");