testLinearSearch.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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. function InitBuffer1(buffer) {
  6. HEAP32 = new Int32Array(buffer);
  7. HEAP32[0] = 13654
  8. HEAP32[1] = 23
  9. HEAP32[2] = 13654
  10. HEAP32[3] = 13654
  11. HEAP32[4] = 423
  12. HEAP32[5] = 4
  13. HEAP32[6] = 5
  14. HEAP32[7] = 3
  15. HEAP32[8] = 145764
  16. HEAP32[9] = 53
  17. }
  18. function InitBuffer2(buffer) {
  19. HEAP32 = new Int32Array(buffer);
  20. for(var i = 0; i < 999999 - 1; i++) {
  21. HEAP32[i] = i + 1;
  22. }
  23. }
  24. function asmModule(stdlib, imports, buffer) {
  25. "use asm";
  26. var log = stdlib.Math.log;
  27. var b4 = stdlib.SIMD.Bool32x4;
  28. var b8 = stdlib.SIMD.Bool16x8;
  29. var b16 = stdlib.SIMD.Bool8x16;
  30. var b4check = b4.check;
  31. var b8check = b8.check;
  32. var b16check = b16.check;
  33. var b4and = b4.and;
  34. var b8and = b8.and;
  35. var b16and = b16.and;
  36. var b4or = b4.or;
  37. var b8or = b8.or;
  38. var b16or= b16.or;
  39. var b4xor = b4.xor;
  40. var b8xor = b8.xor;
  41. var b16xor= b16.xor;
  42. var b4not = b4.not;
  43. var b8not = b8.not;
  44. var b16not = b16.not;
  45. var b4allTrue = b4.allTrue;
  46. var b8allTrue = b8.allTrue;
  47. var b16allTrue = b16.allTrue;
  48. var b4anyTrue = b4.anyTrue;
  49. var b8anyTrue = b8.anyTrue;
  50. var b16anyTrue = b16.anyTrue;
  51. var i4 = stdlib.SIMD.Int32x4;
  52. var i4equal = i4.equal;
  53. var i4splat = i4.splat;
  54. var i4swizzle = i4.swizzle;
  55. var i4extractLane = i4.extractLane;
  56. var HEAP32 = new stdlib.Int32Array(buffer);
  57. var BLOCK_SIZE = 4;
  58. var i = 0;
  59. function linearSearch(value, length) {
  60. value = value | 0;
  61. length = length|0;
  62. var i4Value = i4(0, 0, 0, 0);
  63. var i4Heap = i4(0, 0, 0, 0);
  64. var i4Result = i4(0, 0, 0, 0);
  65. var b4Result = b4(0, 0, 0, 0);
  66. var i4Flipped = i4(0, 0, 0, 0);
  67. var iVal = 0, loc = 0;
  68. i4Value = i4splat(value | 0);
  69. for(i = 0; (i | 0) < (length | 0); i = (i + BLOCK_SIZE) | 0) {
  70. i4Heap = i4((HEAP32[(i << 2) >> 2] | 0), (HEAP32[((i + 1) << 2) >> 2] | 0), (HEAP32[((i + 2) << 2) >> 2] | 0), (HEAP32[((i + 3) << 2) >> 2] | 0));
  71. b4Result = i4equal(i4Heap, i4Value);
  72. if((b4anyTrue(b4Result) | 0 )!= 0) {
  73. i4Flipped = i4swizzle(i4Heap, 3, 2, 1, 0);
  74. iVal = i4extractLane(i4Flipped, 0);
  75. if ( (iVal | 0) == (value | 0))
  76. { loc = 0;}
  77. iVal = i4extractLane(i4Flipped, 1);
  78. if ( (iVal | 0) == (value | 0))
  79. { loc = 1;}
  80. iVal = i4extractLane(i4Flipped, 2);
  81. if ( (iVal | 0) == (value | 0))
  82. { loc = 2;}
  83. iVal = i4extractLane(i4Flipped, 3);
  84. if ( (iVal | 0) == (value | 0))
  85. { loc = 3;}
  86. return (i + BLOCK_SIZE - loc - 1)|0
  87. }
  88. }
  89. return -1;
  90. }
  91. return {linearSearch:linearSearch};
  92. }
  93. var buffer = new ArrayBuffer(16 * 1024 * 1024);
  94. var m = asmModule(this, null, buffer);
  95. InitBuffer1(buffer);
  96. WScript.Echo("List 1");
  97. WScript.Echo(m.linearSearch(13654, 10));
  98. WScript.Echo(m.linearSearch(23, 10));
  99. WScript.Echo(m.linearSearch(145764, 10));
  100. WScript.Echo(m.linearSearch(53, 10));
  101. WScript.Echo(m.linearSearch(-53, 10));
  102. InitBuffer2(buffer);
  103. WScript.Echo("List 2");
  104. WScript.Echo(m.linearSearch(13654, 999999));
  105. WScript.Echo(m.linearSearch(23, 999999));
  106. WScript.Echo(m.linearSearch(145764, 999999));
  107. WScript.Echo(m.linearSearch(-53, 999999));