testLoadStore.js 21 KB

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