loopyieldregress.js 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. function getBuf() {
  6. if (WebAssembly.wabt) {
  7. const buf = WebAssembly.wabt.convertWast2Wasm(`(module
  8. (memory 1 1)
  9. (func $_main (export "foo") (param i32 i32) (result i32)
  10. (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i64)
  11. block
  12. block
  13. loop ;; label = @5
  14. block ;; label = @6
  15. get_local 3
  16. i32.const -3
  17. i32.and
  18. set_local 3
  19. get_local 3
  20. i32.const 16
  21. i32.shl
  22. i32.const 16
  23. i32.shr_s
  24. set_local 1
  25. get_local 0
  26. get_local 1
  27. i32.lt_s
  28. if (result i32) ;; label = @7
  29. get_local 4
  30. i32.load8_s
  31. set_local 1
  32. get_local 1
  33. i32.const 1
  34. i32.ne
  35. br_if 1 (;@6;)
  36. get_local 9
  37. i32.const -2115251625
  38. i32.store
  39. i32.const -2115251625
  40. set_local 1
  41. i32.const 1
  42. else
  43. get_local 7
  44. i32.const 0
  45. i32.store
  46. get_local 0
  47. set_local 1
  48. get_local 3
  49. end
  50. set_local 0
  51. i32.const 22112
  52. get_local 6
  53. i32.const 1
  54. i32.add
  55. tee_local 6
  56. i32.store
  57. get_local 6
  58. i32.const 20
  59. i32.ge_s
  60. br_if 2 (;@4;)
  61. get_local 0
  62. set_local 3
  63. get_local 1
  64. set_local 0
  65. br 1 (;@5;)
  66. end
  67. end
  68. end
  69. end
  70. (i32.const 0)
  71. )
  72. )`);
  73. //const view = new Uint8Array(buf);
  74. //console.log(view.join(","));
  75. return buf;
  76. } else {
  77. const arr = [0,97,115,109,1,0,0,0,1,7,1,96,2,127,127,1,127,3,2,1,0,5,4,1,1,1,1,7,7,1,3,102,111,111,0,0,10,131,1,1,128,1,2,158,1,127,1,126,2,64,2,64,3,64,2,64,32,3,65,125,113,33,3,32,3,65,16,116,65,16,117,33,1,32,0,32,1,72,4,127,32,4,44,0,0,33,1,32,1,65,1,71,13,1,32,9,65,215,164,175,143,120,54,2,0,65,215,164,175,143,120,33,1,65,1,5,32,7,65,0,54,2,0,32,0,33,1,32,3,11,33,0,65,224,172,1,32,6,65,1,106,34,6,54,2,0,32,6,65,20,78,13,2,32,0,33,3,32,1,33,0,12,1,11,11,11,11,65,0,11]
  78. const buf = new ArrayBuffer(arr.length);
  79. const view = new Uint8Array(buf);
  80. for (let i = 0; i < arr.length; ++i) {
  81. view[i] = arr[i];
  82. }
  83. return buf;
  84. }
  85. }
  86. const mod = new WebAssembly.Module(getBuf());
  87. const {exports} = new WebAssembly.Instance(mod);
  88. console.log(exports.foo() == 0 ? "pass" : "failed");