testLoadStore.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742
  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, buffer) {
  7. "use asm";
  8. var i4 = stdlib.SIMD.Int32x4;
  9. var i4check = i4.check;
  10. var i4splat = i4.splat;
  11. var i4fromFloat32x4 = i4.fromFloat32x4;
  12. var i4fromFloat32x4Bits = i4.fromFloat32x4Bits;
  13. //var i4abs = i4.abs;
  14. var i4neg = i4.neg;
  15. var i4add = i4.add;
  16. var i4sub = i4.sub;
  17. var i4mul = i4.mul;
  18. var i4swizzle = i4.swizzle;
  19. var i4shuffle = i4.shuffle;
  20. var i4lessThan = i4.lessThan;
  21. var i4equal = i4.equal;
  22. var i4greaterThan = i4.greaterThan;
  23. var i4select = i4.select;
  24. var i4and = i4.and;
  25. var i4or = i4.or;
  26. var i4xor = i4.xor;
  27. var i4not = i4.not;
  28. var i4load = i4.load;
  29. var i4load1 = i4.load1;
  30. var i4load2 = i4.load2;
  31. var i4load3 = i4.load3;
  32. var i4store = i4.store
  33. var i4store1 = i4.store1;
  34. var i4store2 = i4.store2;
  35. var i4store3 = i4.store3;
  36. //var i4shiftLeftByScalar = i4.shiftLeftByScalar;
  37. //var i4shiftRightByScalar = i4.shiftRightByScalar;
  38. //var i4shiftRightArithmeticByScalar = i4.shiftRightArithmeticByScalar;
  39. var f4 = stdlib.SIMD.Float32x4;
  40. var f4check = f4.check;
  41. var f4splat = f4.splat;
  42. var f4fromInt32x4 = f4.fromInt32x4;
  43. var f4fromInt32x4Bits = f4.fromInt32x4Bits;
  44. var f4abs = f4.abs;
  45. var f4neg = f4.neg;
  46. var f4add = f4.add;
  47. var f4sub = f4.sub;
  48. var f4mul = f4.mul;
  49. var f4div = f4.div;
  50. var f4min = f4.min;
  51. var f4max = f4.max;
  52. var f4sqrt = f4.sqrt;
  53. var f4swizzle = f4.swizzle;
  54. var f4shuffle = f4.shuffle;
  55. var f4lessThan = f4.lessThan;
  56. var f4lessThanOrEqual = f4.lessThanOrEqual;
  57. var f4equal = f4.equal;
  58. var f4notEqual = f4.notEqual;
  59. var f4greaterThan = f4.greaterThan;
  60. var f4greaterThanOrEqual = f4.greaterThanOrEqual;
  61. var f4select = f4.select;
  62. var f4load = f4.load;
  63. var f4load1 = f4.load1;
  64. var f4load2 = f4.load2;
  65. var f4load3 = f4.load3;
  66. var f4store = f4.store;
  67. var f4store1 = f4.store1;
  68. var f4store2 = f4.store2;
  69. var f4store3 = f4.store3;
  70. var fround = stdlib.Math.fround;
  71. var globImportF4 = f4check(imports.g1); // global var import
  72. var globImportI4 = i4check(imports.g2); // global var import
  73. var g1 = f4(-5033.2,-3401.0,665.34,32234.1); // global var initialized
  74. var g2 = i4(1065353216, -1073741824, -1077936128, 1082130432); // global var initialized
  75. var gval = 1234;
  76. var gval2 = 1234.0;
  77. var loopCOUNT = 3;
  78. var Int8Heap = new stdlib.Int8Array (buffer);
  79. var Uint8Heap = new stdlib.Uint8Array (buffer);
  80. var Int16Heap = new stdlib.Int16Array(buffer);
  81. var Uint16Heap = new stdlib.Uint16Array(buffer);
  82. var Int32Heap = new stdlib.Int32Array(buffer);
  83. var Uint32Heap = new stdlib.Uint32Array(buffer);
  84. var Float32Heap = new stdlib.Float32Array(buffer);
  85. function func0()
  86. {
  87. var x = i4(1, 2, 3, 4);
  88. var y = i4(0, 0, 0, 0);
  89. var st = i4(0, 0, 0, 0);
  90. var ld = i4(0, 0, 0, 0);
  91. var t0 = i4(0, 0, 0, 0);
  92. var t1 = i4(0, 0, 0, 0);
  93. var t2 = i4(0, 0, 0, 0);
  94. var t3 = i4(0, 0, 0, 0);
  95. var index = 100;
  96. var size = 10;
  97. var loopIndex = 0;
  98. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  99. {
  100. st = i4store(Int8Heap, index >> 0, x);
  101. ld = i4load(Int8Heap, index >> 0);
  102. y = i4add(st, ld); // (0,0,0,0)
  103. t0 = i4add(i4store(Int8Heap, index >> 0, x), i4load(Int8Heap, index >> 0));
  104. t0 = i4add(y, t0);
  105. st = i4store1(Int8Heap, index >> 0, x);
  106. ld = i4load(Int8Heap, index >> 0);
  107. y = i4add(st, ld); // (0,0,0,0)
  108. t1 = i4add(i4store1(Int8Heap, index >> 0, x), i4load(Int8Heap, index >> 0));
  109. t1 = i4add(y, t1);
  110. st = i4store2(Int8Heap, index >> 0, x);
  111. ld = i4load(Int8Heap, index >> 0);
  112. y = i4add(st, ld); // (0,0,0,0)
  113. t2 = i4add(i4store2(Int8Heap, index >> 0, x), i4load(Int8Heap, index >> 0));
  114. t2 = i4add(y, t2);
  115. st = i4store3(Int8Heap, index >> 0, x);
  116. ld = i4load(Int8Heap, index >> 0);
  117. y = i4add(st, ld); // (0,0,0,0)
  118. t3 = i4add(i4store3(Int8Heap, index >> 0, x), i4load(Int8Heap, index >> 0));
  119. t3 = i4add(y, t3);
  120. t0 = i4add(t0, i4add(t1, i4add(t2, t3)));
  121. index = (index + 16 ) | 0;
  122. }
  123. return i4check(t0);
  124. }
  125. function func1()
  126. {
  127. var x = i4(1, 2, 3, 4);
  128. var t = i4(0, 0, 0, 0);
  129. var y = i4(0, 0, 0, 0);
  130. var index = 100;
  131. var size = 10;
  132. var loopIndex = 0;
  133. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  134. {
  135. i4store(Int8Heap, index >> 0, x);
  136. index = (index + 16 ) | 0;
  137. }
  138. index = 100;
  139. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  140. {
  141. t = i4load(Uint8Heap, index >> 0);
  142. y = i4add(y, t);
  143. index = (index + 16 ) | 0;
  144. }
  145. return i4check(y);
  146. }
  147. function func1OOB_1()
  148. {
  149. var x = i4(1, 2, 3, 4);
  150. var t = i4(0,0,0,0);
  151. var y = i4(0,0,0,0);
  152. var index = 0;
  153. var size = 10;
  154. var loopIndex = 0;
  155. index = (0x10000-160)|0;
  156. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  157. {
  158. i4store(Int8Heap, index >> 0, x);
  159. index = (index + 16 ) | 0;
  160. }
  161. // No OOB
  162. index = (0x10000-160)|0;
  163. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  164. {
  165. t = i4load(Uint8Heap, index >> 0);
  166. y = i4add(y, t);
  167. index = (index + 16 ) | 0;
  168. }
  169. return i4check(y);
  170. }
  171. function func1OOB_2()
  172. {
  173. var x = i4(1, 2, 3, 4);
  174. var t = i4(0,0,0,0);
  175. var y = i4(0,0,0,0);
  176. var index = 0;
  177. var size = 10;
  178. var loopIndex = 0;
  179. index = (0x10000-160)|0;
  180. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  181. {
  182. i4store(Int8Heap, index >> 0, x);
  183. index = (index + 16 ) | 0;
  184. }
  185. // OOB
  186. index = ((0x10000-160) + 1)|0;
  187. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  188. {
  189. t = i4load(Uint8Heap, index >> 0);
  190. y = i4add(y, t);
  191. index = (index + 16 ) | 0;
  192. }
  193. return i4check(y);
  194. }
  195. function func2()
  196. {
  197. var x = i4(1, 2, 3, 4);
  198. var t = i4(0,0,0,0);
  199. var y = i4(0,0,0,0);
  200. var index = 100;
  201. var size = 10;
  202. var loopIndex = 0;
  203. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  204. {
  205. i4store3(Uint16Heap, index >> 1, x);
  206. index = (index + 16 ) | 0;
  207. }
  208. index = 100;
  209. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  210. {
  211. t = i4load3(Int16Heap, index >> 1);
  212. y = i4add(y, t);
  213. index = (index + 16 ) | 0;
  214. }
  215. return i4check(y);
  216. }
  217. function func2OOB_1()
  218. {
  219. var x = i4(1, 2, 3, 4);
  220. var t = i4(0,0,0,0);
  221. var y = i4(0,0,0,0);
  222. var index = 0;
  223. var size = 10;
  224. var loopIndex = 0;
  225. index = (0x10000-160)|0;
  226. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  227. {
  228. i4store3(Uint16Heap, index >> 1, x);
  229. index = (index + 16 ) | 0;
  230. }
  231. // No OOB here
  232. index = ((0x10000 - 160) + 4)|0;
  233. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  234. {
  235. t = i4load3(Int16Heap, index >> 1);
  236. y = i4add(y, t);
  237. index = (index + 16 ) | 0;
  238. }
  239. return i4check(y);
  240. }
  241. function func2OOB_2()
  242. {
  243. var x = i4(1, 2, 3, 4);
  244. var t = i4(0,0,0,0);
  245. var y = i4(0,0,0,0);
  246. var index = 0;
  247. var size = 10;
  248. var loopIndex = 0;
  249. index = (0x10000-160)|0;
  250. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  251. {
  252. i4store3(Uint16Heap, index >> 1, x);
  253. index = (index + 16 ) | 0;
  254. }
  255. index = ((0x10000 - 160) + 6)|0;
  256. // OOB here
  257. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  258. {
  259. t = i4load3(Int16Heap, index >> 1);
  260. y = i4add(y, t);
  261. index = (index + 16 ) | 0;
  262. }
  263. }
  264. function func3()
  265. {
  266. var x = i4(1, 2, 3, 4);
  267. var t = i4(0,0,0,0);
  268. var y = i4(0,0,0,0);
  269. var index = 100;
  270. var size = 10;
  271. var loopIndex = 0;
  272. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  273. {
  274. i4store2(Uint16Heap, index >> 1, x);
  275. index = (index + 16 ) | 0;
  276. }
  277. index = 100;
  278. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  279. {
  280. t = i4load2(Int32Heap, index >> 2);
  281. y = i4add(y, t);
  282. index = (index + 16 ) | 0;
  283. }
  284. return i4check(y);
  285. }
  286. function func3OOB_1()
  287. {
  288. var x = i4(1, 2, 3, 4);
  289. var t = i4(0,0,0,0);
  290. var y = i4(0,0,0,0);
  291. var index = 0;
  292. var size = 10;
  293. var loopIndex = 0;
  294. index = (0x10000-160)|0;
  295. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  296. {
  297. i4store2(Uint16Heap, index >> 1, x);
  298. index = (index + 16 ) | 0;
  299. }
  300. index = ((0x10000 - 160) + 8)|0;
  301. // No OOB
  302. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  303. {
  304. t = i4load2(Int32Heap, index >> 2);
  305. y = i4add(y, t);
  306. index = (index + 16 ) | 0;
  307. }
  308. return i4check(y);
  309. }
  310. function func3OOB_2()
  311. {
  312. var x = i4(1, 2, 3, 4);
  313. var t = i4(0,0,0,0);
  314. var y = i4(0,0,0,0);
  315. var index = 0;
  316. var size = 10;
  317. var loopIndex = 0;
  318. index = (0x10000-160)|0;
  319. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  320. {
  321. i4store2(Uint16Heap, index >> 1, x);
  322. index = (index + 16 ) | 0;
  323. }
  324. index = ((0x10000 - 160) + 32)|0;
  325. // OOB
  326. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  327. {
  328. t = i4load2(Int32Heap, index >> 2);
  329. y = i4add(y, t);
  330. index = (index + 16 ) | 0;
  331. }
  332. return i4check(y);
  333. }
  334. function func4()
  335. {
  336. var x = i4(1, 2, 3, 4);
  337. var t = i4(0,0,0,0);
  338. var y = i4(0,0,0,0);
  339. var index = 100;
  340. var size = 10;
  341. var loopIndex = 0;
  342. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  343. {
  344. i4store1(Uint32Heap, index >> 2, x);
  345. index = (index + 16 ) | 0;
  346. }
  347. index = 100;
  348. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  349. {
  350. t = i4load1(Float32Heap, index >> 2);
  351. y = i4add(y, t);
  352. index = (index + 16 ) | 0;
  353. }
  354. return i4check(y);
  355. }
  356. function func4OOB_1()
  357. {
  358. var x = i4(1, 2, 3, 4);
  359. var t = i4(0,0,0,0);
  360. var y = i4(0,0,0,0);
  361. var index = 0;
  362. var size = 10;
  363. var loopIndex = 0;
  364. index = (0x10000-160)|0;
  365. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  366. {
  367. i4store1(Uint32Heap, index >> 2, x);
  368. index = (index + 16 ) | 0;
  369. }
  370. index = ((0x10000 - 160) + 12)|0;
  371. // No OOB
  372. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  373. {
  374. t = i4load1(Float32Heap, index >> 2);
  375. y = i4add(y, t);
  376. index = (index + 16 ) | 0;
  377. }
  378. return i4check(y);
  379. }
  380. function func4OOB_2()
  381. {
  382. var x = i4(1, 2, 3, 4);
  383. var t = i4(0,0,0,0);
  384. var y = i4(0,0,0,0);
  385. var index = 0;
  386. var size = 10;
  387. var loopIndex = 0;
  388. index = (0x10000-160)|0;
  389. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  390. {
  391. i4store1(Uint32Heap, index >> 2, x);
  392. index = (index + 16 ) | 0;
  393. }
  394. index = ((0x10000 - 160) + 16)|0;
  395. // OOB
  396. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  397. {
  398. t = i4load1(Float32Heap, index >> 2);
  399. y = i4add(y, t);
  400. index = (index + 16 ) | 0;
  401. }
  402. return i4check(y);
  403. }
  404. function func5()
  405. {
  406. var x = i4(1, 2, 3, 4);
  407. var t = i4(0,0,0,0);
  408. var y = i4(0,0,0,0);
  409. var index = 100;
  410. var size = 10;
  411. var loopIndex = 0;
  412. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  413. {
  414. i4store(Uint32Heap, index >> 2, x);
  415. index = (index + 16 ) | 0;
  416. }
  417. index = 100;
  418. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  419. {
  420. t = i4load2(Float32Heap, index >> 2);
  421. y = i4add(y, t);
  422. index = (index + 16 ) | 0;
  423. }
  424. return i4check(y);
  425. }
  426. function func5OOB_1()
  427. {
  428. var x = i4(1, 2, 3, 4);
  429. var t = i4(0,0,0,0);
  430. var y = i4(0,0,0,0);
  431. var index = 0;
  432. var size = 10;
  433. var loopIndex = 0;
  434. index = (0x10000-160)|0;
  435. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  436. {
  437. i4store(Uint32Heap, index >> 2, x);
  438. index = (index + 16 ) | 0;
  439. }
  440. index = ((0x10000 - 160) + 8)|0;
  441. // No OOB
  442. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  443. {
  444. t = i4load2(Float32Heap, index >> 2);
  445. y = i4add(y, t);
  446. index = (index + 16 ) | 0;
  447. }
  448. return i4check(y);
  449. }
  450. function func5OOB_2()
  451. {
  452. var x = i4(1, 2, 3, 4);
  453. var t = i4(0,0,0,0);
  454. var y = i4(0,0,0,0);
  455. var index = 0;
  456. var size = 10;
  457. var loopIndex = 0;
  458. index = (0x10000-160)|0;
  459. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  460. {
  461. i4store(Uint32Heap, index >> 2, x);
  462. index = (index + 16 ) | 0;
  463. }
  464. index = ((0x10000 - 160) + 12)|0;
  465. // OOB
  466. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  467. {
  468. t = i4load2(Float32Heap, index >> 2);
  469. y = i4add(y, t);
  470. index = (index + 16 ) | 0;
  471. }
  472. return i4check(y);
  473. }
  474. function func6()
  475. {
  476. var x = i4(1, 2, 3, 4);
  477. var t = i4(0,0,0,0);
  478. var y = i4(0,0,0,0);
  479. var index = 100;
  480. var size = 10;
  481. var loopIndex = 0;
  482. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  483. {
  484. i4store(Uint32Heap, index >> 2, x);
  485. index = (index + 16 ) | 0;
  486. }
  487. index = 100;
  488. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  489. {
  490. t = i4load1(Float32Heap, index >> 2);
  491. y = i4add(y, t);
  492. index = (index + 16 ) | 0;
  493. }
  494. return i4check(y);
  495. }
  496. function func6OOB_1()
  497. {
  498. var x = i4(1, 2, 3, 4);
  499. var t = i4(0,0,0,0);
  500. var y = i4(0,0,0,0);
  501. var index = 0;
  502. var size = 10;
  503. var loopIndex = 0;
  504. index = (0x10000-160)|0;
  505. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  506. {
  507. i4store(Uint32Heap, index >> 2, x);
  508. index = (index + 16 ) | 0;
  509. }
  510. index = ((0x10000 - 160) + 12)|0;
  511. // No OOB
  512. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  513. {
  514. t = i4load1(Float32Heap, index >> 2);
  515. y = i4add(y, t);
  516. index = (index + 16 ) | 0;
  517. }
  518. return i4check(y);
  519. }
  520. function func6OOB_2()
  521. {
  522. var x = i4(1, 2, 3, 4);
  523. var t = i4(0,0,0,0);
  524. var y = i4(0,0,0,0);
  525. var index = 0;
  526. var size = 10;
  527. var loopIndex = 0;
  528. index = (0x10000-160)|0;
  529. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  530. {
  531. i4store(Uint32Heap, index >> 2, x);
  532. index = (index + 16 ) | 0;
  533. }
  534. index = ((0x10000 - 160) + 16)|0;
  535. // OOB
  536. for (loopIndex = 0; (loopIndex | 0) < (size | 0) ; loopIndex = (loopIndex + 1) | 0)
  537. {
  538. t = i4load1(Float32Heap, index >> 2);
  539. y = i4add(y, t);
  540. index = (index + 16 ) | 0;
  541. }
  542. return i4check(y);
  543. }
  544. // TODO: Test conversion of returned value
  545. function value()
  546. {
  547. var ret = 1.0;
  548. var i = 1.0;
  549. var loopIndex = 0;
  550. while ( (loopIndex|0) < (loopCOUNT|0)) {
  551. ret = ret + i;
  552. loopIndex = (loopIndex + 1) | 0;
  553. }
  554. return +ret;
  555. }
  556. return {
  557. func0:func0,
  558. func1:func1,
  559. func1OOB_1:func1OOB_1,
  560. func1OOB_2:func1OOB_2,
  561. func2:func2,
  562. func2OOB_1:func2OOB_1,
  563. func2OOB_2:func2OOB_2,
  564. func3:func3,
  565. func3OOB_1:func3OOB_1,
  566. func3OOB_2:func3OOB_2,
  567. func4:func4,
  568. func4OOB_1:func4OOB_1,
  569. func4OOB_2:func4OOB_2,
  570. func5:func5,
  571. func5OOB_1:func5OOB_1,
  572. func5OOB_2:func5OOB_2,
  573. func6:func6,
  574. func6OOB_1:func6OOB_1,
  575. func6OOB_2:func6OOB_2
  576. };
  577. }
  578. var buffer = new ArrayBuffer(0x10000);
  579. var m = asmModule(this, {g1:SIMD.Float32x4(90934.2,123.9,419.39,449.0), g2:SIMD.Int32x4(-1065353216, -1073741824,-1077936128, -1082130432)}, buffer);
  580. var ret;
  581. ret = m.func0();
  582. equalSimd([16, 32, 48, 64], ret, SIMD.Int32x4, "Test Load Store");
  583. ret = m.func1();
  584. equalSimd([10, 20, 30, 40], ret, SIMD.Int32x4, "Test Load Store1");
  585. ret = m.func2();
  586. equalSimd([10, 20, 30, 0], ret, SIMD.Int32x4, "Test Load Store2");
  587. ret = m.func3();
  588. equalSimd([10, 20, 0, 0], ret, SIMD.Int32x4, "Test Load Store3");
  589. ret = m.func4();
  590. equalSimd([10, 0, 0, 0], ret, SIMD.Int32x4, "Test Load Store4");
  591. ret = m.func5();
  592. equalSimd([10, 20, 0, 0], ret, SIMD.Int32x4, "Test Load Store5");
  593. ret = m.func6();
  594. equalSimd([10, 0, 0, 0], ret, SIMD.Int32x4, "Test Load Store6");
  595. //
  596. var funcOOB1 = [m.func1OOB_1, m.func2OOB_1 ,m.func3OOB_1, m.func4OOB_1, m.func5OOB_1, m.func6OOB_1];
  597. var RESULTS = [SIMD.Int32x4(10, 20, 30, 40),
  598. SIMD.Int32x4(20, 30, 40, 0),
  599. SIMD.Int32x4(30, 40, 0, 0),
  600. SIMD.Int32x4(40, 0, 0, 0),
  601. SIMD.Int32x4(30, 40, 0, 0),
  602. SIMD.Int32x4(40, 0, 0, 0)
  603. ];
  604. for (var i = 0; i < funcOOB1.length; i ++)
  605. {
  606. try
  607. {
  608. ret = funcOOB1[i]();
  609. equalSimd(RESULTS[i], ret, SIMD.Int32x4, "Test Load Store");
  610. } catch(e)
  611. {
  612. print("Wrong");
  613. }
  614. }
  615. //
  616. var funcOOB2 = [m.func1OOB_2, m.func2OOB_2 ,m.func3OOB_2, m.func4OOB_2, m.func5OOB_2, m.func6OOB_2];
  617. for (var i = 0; i < funcOOB2.length; i ++)
  618. {
  619. try
  620. {
  621. ret = funcOOB2[i]();
  622. print("Wrong");
  623. } catch(e)
  624. {
  625. if (e instanceof RangeError)
  626. {
  627. }
  628. else
  629. print("Wrong");
  630. }
  631. }
  632. print("PASS");