testBitwise.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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 i8 = stdlib.SIMD.Int16x8;
  9. var i8check = i8.check;
  10. var i8splat = i8.splat;
  11. //var i8abs = i8.abs;
  12. var i8neg = i8.neg;
  13. var i8add = i8.add;
  14. var i8sub = i8.sub;
  15. var i8mul = i8.mul;
  16. //var i8select = i8.select;
  17. var i8and = i8.and;
  18. var i8or = i8.or;
  19. var i8xor = i8.xor;
  20. var i8not = i8.not;
  21. var globImporti8 = i8check(imports.g2); // global var import
  22. var i8g1 = i8(1065353216, -1073741824, -1077936128, 1082130432, 1040103192, 1234123832, 0807627311, 0659275670); // global var initialized
  23. var i8g2 = i8(353216, -492529, -1128, 1085, 3692, 3937, 9755, 2638); // global var initialized
  24. var gval = 1234;
  25. var gval2 = 1234.0;
  26. var loopCOUNT = 3;
  27. function func1()
  28. {
  29. var b = i8(5033, -3401, 665, -32234, -948, 2834, 7748, -25);
  30. var c = i8(-34183, 212344, -569437, 65534, 87654, -984, 3434, -9876);
  31. var d = i8(0, 0, 0, 0, 0, 0, 0, 0);
  32. var loopIndex = 0;
  33. while ( (loopIndex|0) < (loopCOUNT|0)) {
  34. d = i8and(b, b);
  35. b = i8or(c, c);
  36. d = i8xor(b, d);
  37. d = i8not(d);
  38. loopIndex = (loopIndex + 1) | 0;
  39. }
  40. return i8check(d);
  41. }
  42. function func2()
  43. {
  44. var b = i8(5033, -3401, 665, -32234, -948, 2834, 7748, -25);
  45. var c = i8(-34183, 212344, -569437, 65534, 87654, -984, 3434, -9876);
  46. var d = i8(0, 0, 0, 0, 0, 0, 0, 0);
  47. var loopIndex = 0;
  48. for (loopIndex = 0; (loopIndex | 0) < (loopCOUNT | 0) ; loopIndex = (loopIndex + 1) | 0)
  49. {
  50. d = i8and(i8g1, i8g2);
  51. d = i8or(d, b);
  52. d = i8xor(d, globImporti8);
  53. d = i8not(d);
  54. }
  55. return i8check(d);
  56. }
  57. function func3()
  58. {
  59. var b = i8(5033, -3401, 665, -32234, -948, 2834, 7748, -25);
  60. var c = i8(-34183, 212344, -569437, 65534, 87654, -984, 3434, -9876);
  61. var d = i8(0, 0, 0, 0, 0, 0, 0, 0);
  62. var loopIndex = 0;
  63. loopIndex = loopCOUNT | 0;
  64. do {
  65. i8g1 = i8and(i8g1, i8g2);
  66. i8g1 = i8or(i8g1, b);
  67. i8g1 = i8xor(i8g1, c);
  68. i8g1 = i8not(i8g1);
  69. loopIndex = (loopIndex - 1) | 0;
  70. }
  71. while ( (loopIndex | 0) > 0);
  72. return i8check(i8g1);
  73. }
  74. return {func1:func1, func2:func2, func3:func3};
  75. }
  76. var m = asmModule(this, { g1: SIMD.Float32x4(90934.2, 123.9, 419.39, 449.0), g2:SIMD.Int16x8(-1065353216, -1073741824, -1077936128, -1082130432, -383829393, -39283838, -92929, -109483922) /*, g3: SIMD.Float64x2(110.20, 58967.0, 14511.670, 191766.23431)*/ });
  77. equalSimd([-1, -1, -1, -1, -1, -1, -1, -1], m.func1(), SIMD.Int16x8, "Func1");
  78. equalSimd([-5034, 3400, -666, 32233, 15324, 25423, 21839, 26742], m.func2(), SIMD.Int16x8, "Func2");
  79. equalSimd([-27089, 12336, -19771, -32233, 22485, 3301, -13094, -9868], m.func3(), SIMD.Int16x8, "Func3");
  80. print("PASS");