testConstructorLanes.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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 ui4extractLane = ui4.extractLane;
  11. var ui4replaceLane = ui4.replaceLane;
  12. var globImportui4 = ui4check(imports.g1);
  13. var ui4g1 = ui4(1065353216, 1073741824, 1077936128, 1082130432);
  14. var vectorLength = 8;
  15. var loopCOUNT = 3;
  16. var i4 = stdlib.SIMD.Int32x4;
  17. var i4check = i4.check;
  18. var i4fu4 = i4.fromUint32x4Bits;
  19. function testLocal() {
  20. var a = ui4(8488484, 4848848, 29975939, 9493872);
  21. var result = ui4(0, 0, 0, 0);
  22. var loopIndex = 0;
  23. var a0 = 0;
  24. var a1 = 0;
  25. var a2 = 0;
  26. var a3 = 0;
  27. while ((loopIndex | 0) < (loopCOUNT | 0)) {
  28. result = ui4(0, 0, 0, 0);
  29. a0 = ui4extractLane(a, 0);
  30. a1 = ui4extractLane(a, 1);
  31. a2 = ui4extractLane(a, 2);
  32. a3 = ui4extractLane(a, 3);
  33. result = ui4replaceLane(result, 0, a0);
  34. result = ui4replaceLane(result, 1, a1);
  35. result = ui4replaceLane(result, 2, a2);
  36. result = ui4replaceLane(result, 3, a3);
  37. ui4check(result);
  38. loopIndex = (loopIndex + 1) | 0;
  39. }
  40. return i4check(i4fu4(result));
  41. }
  42. function testGlobal() {
  43. var result = ui4(0, 0, 0, 0);
  44. var loopIndex = 0;
  45. var a0 = 0;
  46. var a1 = 0;
  47. var a2 = 0;
  48. var a3 = 0;
  49. while ((loopIndex | 0) < (loopCOUNT | 0)) {
  50. result = ui4(0, 0, 0, 0);
  51. a0 = ui4extractLane(ui4g1, 0);
  52. a1 = ui4extractLane(ui4g1, 1);
  53. a2 = ui4extractLane(ui4g1, 2);
  54. a3 = ui4extractLane(ui4g1, 3);
  55. result = ui4replaceLane(result, 0, a0);
  56. result = ui4replaceLane(result, 1, a1);
  57. result = ui4replaceLane(result, 2, a2);
  58. result = ui4replaceLane(result, 3, a3);
  59. ui4check(result);
  60. loopIndex = (loopIndex + 1) | 0;
  61. }
  62. return i4check(i4fu4(result));
  63. }
  64. function testGlobalImport() {
  65. var result = ui4(0, 0, 0, 0);
  66. var loopIndex = 0;
  67. var a0 = 0;
  68. var a1 = 0;
  69. var a2 = 0;
  70. var a3 = 0;
  71. while ((loopIndex | 0) < (loopCOUNT | 0)) {
  72. result = ui4(0, 0, 0, 0);
  73. a0 = ui4extractLane(globImportui4, 0);
  74. a1 = ui4extractLane(globImportui4, 1);
  75. a2 = ui4extractLane(globImportui4, 2);
  76. a3 = ui4extractLane(globImportui4, 3);
  77. result = ui4replaceLane(result, 0, a0);
  78. result = ui4replaceLane(result, 1, a1);
  79. result = ui4replaceLane(result, 2, a2);
  80. result = ui4replaceLane(result, 3, a3);
  81. ui4check(result);
  82. loopIndex = (loopIndex + 1) | 0;
  83. }
  84. return i4check(i4fu4(result));
  85. }
  86. return { testLocal: testLocal, testGlobal: testGlobal, testGlobalImport: testGlobalImport };
  87. }
  88. var m = asmModule(this, { g1: SIMD.Uint32x4(100, 1073741824, 1028, 102) });
  89. var ret1 = SIMD.Uint32x4.fromInt32x4Bits(m.testLocal());
  90. var ret2 = SIMD.Uint32x4.fromInt32x4Bits(m.testGlobal());
  91. var ret3 = SIMD.Uint32x4.fromInt32x4Bits(m.testGlobalImport());
  92. equalSimd([8488484, 4848848, 29975939, 9493872], ret1, SIMD.Uint32x4, "testLocal");
  93. equalSimd([1065353216, 1073741824, 1077936128, 1082130432], ret2, SIMD.Uint32x4, "testGlobal");
  94. equalSimd([100, 1073741824, 1028, 102], ret3, SIMD.Uint32x4, "testGlobalImport");
  95. print("PASS");