testBitwise.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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 ui16 = stdlib.SIMD.Uint8x16;
  9. var ui16check = ui16.check;
  10. var ui16and = ui16.and;
  11. var ui16or = ui16.or;
  12. var ui16xor = ui16.xor;
  13. var ui16not = ui16.not;
  14. var ui16neg = ui16.neg;
  15. var globImportui16 = ui16check(imports.g1);
  16. var ui16g1 = ui16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
  17. var ui16g2 = ui16(256, 255, 128, 127, 0, 0, 1000, 1000, 5, 15, 3, 399, 299, 21, 45, 22);
  18. var loopCOUNT = 3;
  19. var i16 = stdlib.SIMD.Int8x16;
  20. var i16check = i16.check;
  21. var i16fu16 = i16.fromUint8x16Bits;
  22. function testBitwiseOR()
  23. {
  24. var a = ui16(255, 128, 256, 127, 28, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
  25. var b = ui16(127, 128, 0, 0, 0, 127, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
  26. var result = ui16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  27. var loopIndex = 0;
  28. while ( (loopIndex|0) < (loopCOUNT|0)) {
  29. result = ui16or(a, b);
  30. loopIndex = (loopIndex + 1) | 0;
  31. }
  32. return i16check(i16fu16(result));
  33. }
  34. function testBitwiseAND()
  35. {
  36. var a = ui16(255, 255, 255, 255, -128, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
  37. var b = ui16(255, 128, 0, 43, 0, 127, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
  38. var result = ui16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  39. var loopIndex = 0;
  40. while ( (loopIndex|0) < (loopCOUNT|0)) {
  41. result = ui16and(a, b);
  42. loopIndex = (loopIndex + 1) | 0;
  43. }
  44. return i16check(i16fu16(result));
  45. }
  46. function testBitwiseXOR()
  47. {
  48. var a = ui16(255, 255, 255, 255, -128, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
  49. var b = ui16(255, 128, 0, 43, 0, 127, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
  50. var result = ui16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  51. var loopIndex = 0;
  52. while ( (loopIndex|0) < (loopCOUNT|0)) {
  53. result = ui16xor(a, b);
  54. loopIndex = (loopIndex + 1) | 0;
  55. }
  56. return i16check(i16fu16(result));
  57. }
  58. function testBitwiseNOT() {
  59. var a = ui16(255, 255, 255, 255, -128, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
  60. var result = ui16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  61. var loopIndex = 0;
  62. while ( (loopIndex|0) < (loopCOUNT|0)) {
  63. result = ui16not(a);
  64. loopIndex = (loopIndex + 1) | 0;
  65. }
  66. return i16check(i16fu16(result));
  67. }
  68. function testBitwiseNEG() {
  69. var a = ui16(255, 255, 255, 255, -128, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
  70. var result = ui16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  71. var loopIndex = 0;
  72. while ( (loopIndex|0) < (loopCOUNT|0)) {
  73. result = ui16neg(a);
  74. loopIndex = (loopIndex + 1) | 0;
  75. }
  76. return i16check(i16fu16(result));
  77. }
  78. return {testBitwiseOR:testBitwiseOR, testBitwiseAND:testBitwiseAND, testBitwiseXOR:testBitwiseXOR, testBitwiseNOT:testBitwiseNOT, testBitwiseNEG:testBitwiseNEG};
  79. }
  80. var m = asmModule(this, { g1: SIMD.Uint8x16(100, -1073741824, -1028, -102, NaN, -38, -92929, Infinity, 52, 127, -127, -129, 129, 0, 88, 100234) });
  81. var ret1 = SIMD.Uint8x16.fromInt8x16Bits(m.testBitwiseOR());
  82. var ret2 = SIMD.Uint8x16.fromInt8x16Bits(m.testBitwiseAND());
  83. var ret3 = SIMD.Uint8x16.fromInt8x16Bits(m.testBitwiseXOR());
  84. var ret4 = SIMD.Uint8x16.fromInt8x16Bits(m.testBitwiseNOT());
  85. var ret5 = SIMD.Uint8x16.fromInt8x16Bits(m.testBitwiseNEG());
  86. equalSimd([255, 128, 0, 127, 28, 127, 15, 9, 9, 15, 15, 13, 13, 15, 15, 17], ret1, SIMD.Uint8x16, "testBitwiseOR");
  87. equalSimd([255, 128, 0, 43, 0, 0, 2, 8, 8, 2, 2, 4, 4, 2, 2, 0], ret2, SIMD.Uint8x16, "testBitwiseAND");
  88. equalSimd([0, 127, 255, 212, 128, 127, 13, 1, 1, 13, 13, 9, 9, 13, 13, 17], ret3, SIMD.Uint8x16, "testBitwiseXOR");
  89. equalSimd([0, 0, 0, 0, 127, 255, 248, 247, 246, 245, 244, 243, 242, 241, 240, 239], ret4, SIMD.Uint8x16, "testBitwiseNOT");
  90. equalSimd([1, 1, 1, 1, 128, 0, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240], ret5, SIMD.Uint8x16, "testBitwiseNEG");
  91. print("PASS");