testBitwise.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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 ui4 = stdlib.SIMD.Uint32x4;
  9. var ui4check = ui4.check;
  10. var ui4splat = ui4.splat;
  11. var ui4fromFloat32x4 = ui4.fromFloat32x4;
  12. var ui4fromFloat32x4Bits = ui4.fromFloat32x4Bits;
  13. //var ui4abs = ui4.abs;
  14. var ui4add = ui4.add;
  15. var ui4sub = ui4.sub;
  16. var ui4mul = ui4.mul;
  17. var ui4and = ui4.and;
  18. var ui4or = ui4.or;
  19. var ui4xor = ui4.xor;
  20. var ui4not = ui4.not;
  21. var ui4neg = ui4.neg;
  22. var globImportui4 = ui4check(imports.g1); // global var import
  23. var ui4g1 = ui4(1065353216, 1073741824, 1077936128, 1082130432); // global var initialized
  24. var ui4g2 = ui4(6531634, 74182444, 779364128, 821730432);
  25. var gval = 1234;
  26. var gval2 = 1234.0;
  27. var loopCOUNT = 3;
  28. var i4 = stdlib.SIMD.Int32x4;
  29. var i4check = i4.check;
  30. var i4fu4 = i4.fromUint32x4Bits;
  31. function func1()
  32. {
  33. var b = ui4(8488484, 4848848, 29975939, 9493872);
  34. var c = ui4(99372621, 18848392, 888288822, 1000010012);
  35. var d = ui4(0, 0, 0, 0);
  36. var loopIndex = 0;
  37. while ( (loopIndex|0) < (loopCOUNT|0)) {
  38. d = ui4and(b, b);
  39. b = ui4or(c, c);
  40. d = ui4xor(b, d);
  41. d = ui4not(d);
  42. d = ui4neg(d);
  43. loopIndex = (loopIndex + 1) | 0;
  44. }
  45. return i4check(i4fu4(d));
  46. }
  47. function func2()
  48. {
  49. var b = ui4(8488484, 4848848, 29975939, 9493872);
  50. var c = ui4(99372621, 18848392, 888288822, 1000010012);
  51. var d = ui4(0, 0, 0, 0);
  52. var loopIndex = 0;
  53. for (loopIndex = 0; (loopIndex | 0) < (loopCOUNT | 0) ; loopIndex = (loopIndex + 1) | 0)
  54. {
  55. d = ui4and(ui4g1, ui4g2);
  56. d = ui4or(d, b);
  57. d = ui4xor(d, globImportui4);
  58. d = ui4not(d);
  59. d = ui4neg(d);
  60. }
  61. return i4check(i4fu4(d));
  62. }
  63. function func3()
  64. {
  65. var b = ui4(8488484, 4848848, 29975939, 9493872);
  66. var c = ui4(99372621, 18848392, 888288822, 1000010012);
  67. var d = ui4(0, 0, 0, 0);
  68. var loopIndex = 0;
  69. loopIndex = loopCOUNT | 0;
  70. do {
  71. ui4g1 = ui4and(ui4g1, ui4g2);
  72. ui4g1 = ui4or(ui4g1, b);
  73. ui4g1 = ui4xor(ui4g1, c);
  74. ui4g1 = ui4not(ui4g1);
  75. ui4g1 = ui4neg(ui4g1);
  76. loopIndex = (loopIndex - 1) | 0;
  77. }
  78. while ( (loopIndex | 0) > 0);
  79. return i4check(i4fu4(ui4g1));
  80. }
  81. return {func1:func1, func2:func2, func3:func3};
  82. }
  83. var m = asmModule(this, { g1: SIMD.Uint32x4(100, 1073741824, 1028, 102) });
  84. var ret1 = SIMD.Uint32x4.fromInt32x4Bits(m.func1());
  85. var ret2 = SIMD.Uint32x4.fromInt32x4Bits(m.func2());
  86. var ret3 = SIMD.Uint32x4.fromInt32x4Bits(m.func3());
  87. equalSimd([1, 1, 1, 1], ret1, SIMD.Uint32x4, "Func1");
  88. equalSimd([8488513, 1078590673, 29974920, 9493783], ret2, SIMD.Uint32x4, "Func2");
  89. equalSimd([91080810, 22439513, 893080502, 990522477], ret3, SIMD.Uint32x4, "Func3");
  90. print("PASS");