PageRenderTime 60ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/orc/orcemulateopcodes.c

https://bitbucket.org/jingtao/orc
C | 5373 lines | 3733 code | 976 blank | 664 comment | 233 complexity | d23d91d76d868703577aa8aacaa2e9f6 MD5 | raw file
Possible License(s): BSD-3-Clause

Large files files are truncated, but you can click here to view the full file

  1. /* autogenerated by generate-emulation */
  2. #ifdef HAVE_CONFIG_H
  3. #include "config.h"
  4. #endif
  5. #include <math.h>
  6. #include <orc/orc.h>
  7. /* begin Orc C target preamble */
  8. #define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
  9. #define ORC_ABS(a) ((a)<0 ? -(a) : (a))
  10. #define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
  11. #define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
  12. #define ORC_SB_MAX 127
  13. #define ORC_SB_MIN (-1-ORC_SB_MAX)
  14. #define ORC_UB_MAX 255
  15. #define ORC_UB_MIN 0
  16. #define ORC_SW_MAX 32767
  17. #define ORC_SW_MIN (-1-ORC_SW_MAX)
  18. #define ORC_UW_MAX 65535
  19. #define ORC_UW_MIN 0
  20. #define ORC_SL_MAX 2147483647
  21. #define ORC_SL_MIN (-1-ORC_SL_MAX)
  22. #define ORC_UL_MAX 4294967295U
  23. #define ORC_UL_MIN 0
  24. #define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
  25. #define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
  26. #define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
  27. #define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
  28. #define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
  29. #define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
  30. #define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
  31. #define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
  32. #define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
  33. #define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
  34. #define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
  35. #define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
  36. #define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
  37. #define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
  38. #ifndef ORC_RESTRICT
  39. #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
  40. #define ORC_RESTRICT restrict
  41. #elif defined(__GNUC__) && __GNUC__ >= 4
  42. #define ORC_RESTRICT __restrict__
  43. #else
  44. #define ORC_RESTRICT
  45. #endif
  46. #endif
  47. /* end Orc C target preamble */
  48. void
  49. emulate_absb (OrcOpcodeExecutor *ex, int offset, int n)
  50. {
  51. int i;
  52. orc_int8 * ORC_RESTRICT ptr0;
  53. const orc_int8 * ORC_RESTRICT ptr4;
  54. orc_int8 var32;
  55. orc_int8 var33;
  56. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  57. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  58. for (i = 0; i < n; i++) {
  59. /* 0: loadb */
  60. var32 = ptr4[i];
  61. /* 1: absb */
  62. var33 = ORC_ABS(var32);
  63. /* 2: storeb */
  64. ptr0[i] = var33;
  65. }
  66. }
  67. void
  68. emulate_addb (OrcOpcodeExecutor *ex, int offset, int n)
  69. {
  70. int i;
  71. orc_int8 * ORC_RESTRICT ptr0;
  72. const orc_int8 * ORC_RESTRICT ptr4;
  73. const orc_int8 * ORC_RESTRICT ptr5;
  74. orc_int8 var32;
  75. orc_int8 var33;
  76. orc_int8 var34;
  77. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  78. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  79. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  80. for (i = 0; i < n; i++) {
  81. /* 0: loadb */
  82. var32 = ptr4[i];
  83. /* 1: loadb */
  84. var33 = ptr5[i];
  85. /* 2: addb */
  86. var34 = var32 + var33;
  87. /* 3: storeb */
  88. ptr0[i] = var34;
  89. }
  90. }
  91. void
  92. emulate_addssb (OrcOpcodeExecutor *ex, int offset, int n)
  93. {
  94. int i;
  95. orc_int8 * ORC_RESTRICT ptr0;
  96. const orc_int8 * ORC_RESTRICT ptr4;
  97. const orc_int8 * ORC_RESTRICT ptr5;
  98. orc_int8 var32;
  99. orc_int8 var33;
  100. orc_int8 var34;
  101. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  102. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  103. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  104. for (i = 0; i < n; i++) {
  105. /* 0: loadb */
  106. var32 = ptr4[i];
  107. /* 1: loadb */
  108. var33 = ptr5[i];
  109. /* 2: addssb */
  110. var34 = ORC_CLAMP_SB(var32 + var33);
  111. /* 3: storeb */
  112. ptr0[i] = var34;
  113. }
  114. }
  115. void
  116. emulate_addusb (OrcOpcodeExecutor *ex, int offset, int n)
  117. {
  118. int i;
  119. orc_int8 * ORC_RESTRICT ptr0;
  120. const orc_int8 * ORC_RESTRICT ptr4;
  121. const orc_int8 * ORC_RESTRICT ptr5;
  122. orc_int8 var32;
  123. orc_int8 var33;
  124. orc_int8 var34;
  125. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  126. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  127. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  128. for (i = 0; i < n; i++) {
  129. /* 0: loadb */
  130. var32 = ptr4[i];
  131. /* 1: loadb */
  132. var33 = ptr5[i];
  133. /* 2: addusb */
  134. var34 = ORC_CLAMP_UB((orc_uint8)var32 + (orc_uint8)var33);
  135. /* 3: storeb */
  136. ptr0[i] = var34;
  137. }
  138. }
  139. void
  140. emulate_andb (OrcOpcodeExecutor *ex, int offset, int n)
  141. {
  142. int i;
  143. orc_int8 * ORC_RESTRICT ptr0;
  144. const orc_int8 * ORC_RESTRICT ptr4;
  145. const orc_int8 * ORC_RESTRICT ptr5;
  146. orc_int8 var32;
  147. orc_int8 var33;
  148. orc_int8 var34;
  149. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  150. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  151. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  152. for (i = 0; i < n; i++) {
  153. /* 0: loadb */
  154. var32 = ptr4[i];
  155. /* 1: loadb */
  156. var33 = ptr5[i];
  157. /* 2: andb */
  158. var34 = var32 & var33;
  159. /* 3: storeb */
  160. ptr0[i] = var34;
  161. }
  162. }
  163. void
  164. emulate_andnb (OrcOpcodeExecutor *ex, int offset, int n)
  165. {
  166. int i;
  167. orc_int8 * ORC_RESTRICT ptr0;
  168. const orc_int8 * ORC_RESTRICT ptr4;
  169. const orc_int8 * ORC_RESTRICT ptr5;
  170. orc_int8 var32;
  171. orc_int8 var33;
  172. orc_int8 var34;
  173. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  174. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  175. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  176. for (i = 0; i < n; i++) {
  177. /* 0: loadb */
  178. var32 = ptr4[i];
  179. /* 1: loadb */
  180. var33 = ptr5[i];
  181. /* 2: andnb */
  182. var34 = (~var32) & var33;
  183. /* 3: storeb */
  184. ptr0[i] = var34;
  185. }
  186. }
  187. void
  188. emulate_avgsb (OrcOpcodeExecutor *ex, int offset, int n)
  189. {
  190. int i;
  191. orc_int8 * ORC_RESTRICT ptr0;
  192. const orc_int8 * ORC_RESTRICT ptr4;
  193. const orc_int8 * ORC_RESTRICT ptr5;
  194. orc_int8 var32;
  195. orc_int8 var33;
  196. orc_int8 var34;
  197. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  198. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  199. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  200. for (i = 0; i < n; i++) {
  201. /* 0: loadb */
  202. var32 = ptr4[i];
  203. /* 1: loadb */
  204. var33 = ptr5[i];
  205. /* 2: avgsb */
  206. var34 = (var32 + var33 + 1)>>1;
  207. /* 3: storeb */
  208. ptr0[i] = var34;
  209. }
  210. }
  211. void
  212. emulate_avgub (OrcOpcodeExecutor *ex, int offset, int n)
  213. {
  214. int i;
  215. orc_int8 * ORC_RESTRICT ptr0;
  216. const orc_int8 * ORC_RESTRICT ptr4;
  217. const orc_int8 * ORC_RESTRICT ptr5;
  218. orc_int8 var32;
  219. orc_int8 var33;
  220. orc_int8 var34;
  221. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  222. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  223. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  224. for (i = 0; i < n; i++) {
  225. /* 0: loadb */
  226. var32 = ptr4[i];
  227. /* 1: loadb */
  228. var33 = ptr5[i];
  229. /* 2: avgub */
  230. var34 = ((orc_uint8)var32 + (orc_uint8)var33 + 1)>>1;
  231. /* 3: storeb */
  232. ptr0[i] = var34;
  233. }
  234. }
  235. void
  236. emulate_cmpeqb (OrcOpcodeExecutor *ex, int offset, int n)
  237. {
  238. int i;
  239. orc_int8 * ORC_RESTRICT ptr0;
  240. const orc_int8 * ORC_RESTRICT ptr4;
  241. const orc_int8 * ORC_RESTRICT ptr5;
  242. orc_int8 var32;
  243. orc_int8 var33;
  244. orc_int8 var34;
  245. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  246. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  247. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  248. for (i = 0; i < n; i++) {
  249. /* 0: loadb */
  250. var32 = ptr4[i];
  251. /* 1: loadb */
  252. var33 = ptr5[i];
  253. /* 2: cmpeqb */
  254. var34 = (var32 == var33) ? (~0) : 0;
  255. /* 3: storeb */
  256. ptr0[i] = var34;
  257. }
  258. }
  259. void
  260. emulate_cmpgtsb (OrcOpcodeExecutor *ex, int offset, int n)
  261. {
  262. int i;
  263. orc_int8 * ORC_RESTRICT ptr0;
  264. const orc_int8 * ORC_RESTRICT ptr4;
  265. const orc_int8 * ORC_RESTRICT ptr5;
  266. orc_int8 var32;
  267. orc_int8 var33;
  268. orc_int8 var34;
  269. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  270. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  271. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  272. for (i = 0; i < n; i++) {
  273. /* 0: loadb */
  274. var32 = ptr4[i];
  275. /* 1: loadb */
  276. var33 = ptr5[i];
  277. /* 2: cmpgtsb */
  278. var34 = (var32 > var33) ? (~0) : 0;
  279. /* 3: storeb */
  280. ptr0[i] = var34;
  281. }
  282. }
  283. void
  284. emulate_copyb (OrcOpcodeExecutor *ex, int offset, int n)
  285. {
  286. int i;
  287. orc_int8 * ORC_RESTRICT ptr0;
  288. const orc_int8 * ORC_RESTRICT ptr4;
  289. orc_int8 var32;
  290. orc_int8 var33;
  291. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  292. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  293. for (i = 0; i < n; i++) {
  294. /* 0: loadb */
  295. var32 = ptr4[i];
  296. /* 1: copyb */
  297. var33 = var32;
  298. /* 2: storeb */
  299. ptr0[i] = var33;
  300. }
  301. }
  302. void
  303. emulate_loadb (OrcOpcodeExecutor *ex, int offset, int n)
  304. {
  305. int i;
  306. orc_int8 * ORC_RESTRICT ptr0;
  307. const orc_int8 * ORC_RESTRICT ptr4;
  308. orc_int8 var32;
  309. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  310. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  311. for (i = 0; i < n; i++) {
  312. /* 0: loadb */
  313. var32 = ptr4[offset + i];
  314. /* 1: storeb */
  315. ptr0[i] = var32;
  316. }
  317. }
  318. void
  319. emulate_loadoffb (OrcOpcodeExecutor *ex, int offset, int n)
  320. {
  321. int i;
  322. orc_int8 * ORC_RESTRICT ptr0;
  323. const orc_int8 * ORC_RESTRICT ptr4;
  324. orc_int8 var32;
  325. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  326. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  327. for (i = 0; i < n; i++) {
  328. /* 0: loadoffb */
  329. var32 = ptr4[offset + i + ((orc_union64 *)(ex->src_ptrs[1]))->i];
  330. /* 1: storeb */
  331. ptr0[i] = var32;
  332. }
  333. }
  334. void
  335. emulate_loadupdb (OrcOpcodeExecutor *ex, int offset, int n)
  336. {
  337. int i;
  338. orc_int8 * ORC_RESTRICT ptr0;
  339. const orc_int8 * ORC_RESTRICT ptr4;
  340. orc_int8 var32;
  341. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  342. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  343. for (i = 0; i < n; i++) {
  344. /* 0: loadupdb */
  345. var32 = ptr4[(offset + i)>>1];
  346. /* 1: storeb */
  347. ptr0[i] = var32;
  348. }
  349. }
  350. void
  351. emulate_loadupib (OrcOpcodeExecutor *ex, int offset, int n)
  352. {
  353. int i;
  354. orc_int8 * ORC_RESTRICT ptr0;
  355. const orc_int8 * ORC_RESTRICT ptr4;
  356. orc_int8 var32;
  357. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  358. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  359. for (i = 0; i < n; i++) {
  360. /* 0: loadupib */
  361. var32 = ((offset + i)&1) ? ((orc_uint8)ptr4[(offset + i)>>1] + (orc_uint8)ptr4[((offset + i)>>1)+1] + 1)>>1 : ptr4[(offset + i)>>1];
  362. /* 1: storeb */
  363. ptr0[i] = var32;
  364. }
  365. }
  366. void
  367. emulate_loadpb (OrcOpcodeExecutor *ex, int offset, int n)
  368. {
  369. int i;
  370. orc_int8 * ORC_RESTRICT ptr0;
  371. orc_int8 var32;
  372. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  373. /* 0: loadpb */
  374. var32 = ((orc_union64 *)(ex->src_ptrs[0]))->i;
  375. for (i = 0; i < n; i++) {
  376. /* 1: storeb */
  377. ptr0[i] = var32;
  378. }
  379. }
  380. void
  381. emulate_ldresnearb (OrcOpcodeExecutor *ex, int offset, int n)
  382. {
  383. int i;
  384. orc_int8 * ORC_RESTRICT ptr0;
  385. const orc_int8 * ORC_RESTRICT ptr4;
  386. orc_int8 var32;
  387. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  388. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  389. for (i = 0; i < n; i++) {
  390. /* 0: ldresnearb */
  391. var32 = ptr4[(((orc_union64 *)(ex->src_ptrs[1]))->i + (offset + i)*((orc_union64 *)(ex->src_ptrs[2]))->i)>>16];
  392. /* 1: storeb */
  393. ptr0[i] = var32;
  394. }
  395. }
  396. void
  397. emulate_ldresnearl (OrcOpcodeExecutor *ex, int offset, int n)
  398. {
  399. int i;
  400. orc_union32 * ORC_RESTRICT ptr0;
  401. const orc_union32 * ORC_RESTRICT ptr4;
  402. orc_union32 var32;
  403. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  404. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  405. for (i = 0; i < n; i++) {
  406. /* 0: ldresnearl */
  407. var32 = ptr4[(((orc_union64 *)(ex->src_ptrs[1]))->i + (offset + i)*((orc_union64 *)(ex->src_ptrs[2]))->i)>>16];
  408. /* 1: storel */
  409. ptr0[i] = var32;
  410. }
  411. }
  412. void
  413. emulate_ldreslinb (OrcOpcodeExecutor *ex, int offset, int n)
  414. {
  415. int i;
  416. orc_int8 * ORC_RESTRICT ptr0;
  417. const orc_int8 * ORC_RESTRICT ptr4;
  418. orc_int8 var32;
  419. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  420. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  421. for (i = 0; i < n; i++) {
  422. /* 0: ldreslinb */
  423. {
  424. int tmp = ((orc_union64 *)(ex->src_ptrs[1]))->i + (offset + i) * ((orc_union64 *)(ex->src_ptrs[2]))->i;
  425. var32 = ((orc_uint8)ptr4[tmp>>16] * (256-((tmp>>8)&0xff)) + (orc_uint8)ptr4[(tmp>>16)+1] * ((tmp>>8)&0xff))>>8;
  426. }
  427. /* 1: storeb */
  428. ptr0[i] = var32;
  429. }
  430. }
  431. void
  432. emulate_ldreslinl (OrcOpcodeExecutor *ex, int offset, int n)
  433. {
  434. int i;
  435. orc_union32 * ORC_RESTRICT ptr0;
  436. const orc_union32 * ORC_RESTRICT ptr4;
  437. orc_union32 var32;
  438. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  439. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  440. for (i = 0; i < n; i++) {
  441. /* 0: ldreslinl */
  442. {
  443. int tmp = ((orc_union64 *)(ex->src_ptrs[1]))->i + (offset + i) * ((orc_union64 *)(ex->src_ptrs[2]))->i;
  444. orc_union32 a = ptr4[tmp>>16];
  445. orc_union32 b = ptr4[(tmp>>16)+1];
  446. var32.x4[0] = ((orc_uint8)a.x4[0] * (256-((tmp>>8)&0xff)) + (orc_uint8)b.x4[0] * ((tmp>>8)&0xff))>>8;
  447. var32.x4[1] = ((orc_uint8)a.x4[1] * (256-((tmp>>8)&0xff)) + (orc_uint8)b.x4[1] * ((tmp>>8)&0xff))>>8;
  448. var32.x4[2] = ((orc_uint8)a.x4[2] * (256-((tmp>>8)&0xff)) + (orc_uint8)b.x4[2] * ((tmp>>8)&0xff))>>8;
  449. var32.x4[3] = ((orc_uint8)a.x4[3] * (256-((tmp>>8)&0xff)) + (orc_uint8)b.x4[3] * ((tmp>>8)&0xff))>>8;
  450. }
  451. /* 1: storel */
  452. ptr0[i] = var32;
  453. }
  454. }
  455. void
  456. emulate_maxsb (OrcOpcodeExecutor *ex, int offset, int n)
  457. {
  458. int i;
  459. orc_int8 * ORC_RESTRICT ptr0;
  460. const orc_int8 * ORC_RESTRICT ptr4;
  461. const orc_int8 * ORC_RESTRICT ptr5;
  462. orc_int8 var32;
  463. orc_int8 var33;
  464. orc_int8 var34;
  465. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  466. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  467. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  468. for (i = 0; i < n; i++) {
  469. /* 0: loadb */
  470. var32 = ptr4[i];
  471. /* 1: loadb */
  472. var33 = ptr5[i];
  473. /* 2: maxsb */
  474. var34 = ORC_MAX(var32, var33);
  475. /* 3: storeb */
  476. ptr0[i] = var34;
  477. }
  478. }
  479. void
  480. emulate_maxub (OrcOpcodeExecutor *ex, int offset, int n)
  481. {
  482. int i;
  483. orc_int8 * ORC_RESTRICT ptr0;
  484. const orc_int8 * ORC_RESTRICT ptr4;
  485. const orc_int8 * ORC_RESTRICT ptr5;
  486. orc_int8 var32;
  487. orc_int8 var33;
  488. orc_int8 var34;
  489. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  490. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  491. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  492. for (i = 0; i < n; i++) {
  493. /* 0: loadb */
  494. var32 = ptr4[i];
  495. /* 1: loadb */
  496. var33 = ptr5[i];
  497. /* 2: maxub */
  498. var34 = ORC_MAX((orc_uint8)var32, (orc_uint8)var33);
  499. /* 3: storeb */
  500. ptr0[i] = var34;
  501. }
  502. }
  503. void
  504. emulate_minsb (OrcOpcodeExecutor *ex, int offset, int n)
  505. {
  506. int i;
  507. orc_int8 * ORC_RESTRICT ptr0;
  508. const orc_int8 * ORC_RESTRICT ptr4;
  509. const orc_int8 * ORC_RESTRICT ptr5;
  510. orc_int8 var32;
  511. orc_int8 var33;
  512. orc_int8 var34;
  513. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  514. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  515. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  516. for (i = 0; i < n; i++) {
  517. /* 0: loadb */
  518. var32 = ptr4[i];
  519. /* 1: loadb */
  520. var33 = ptr5[i];
  521. /* 2: minsb */
  522. var34 = ORC_MIN(var32, var33);
  523. /* 3: storeb */
  524. ptr0[i] = var34;
  525. }
  526. }
  527. void
  528. emulate_minub (OrcOpcodeExecutor *ex, int offset, int n)
  529. {
  530. int i;
  531. orc_int8 * ORC_RESTRICT ptr0;
  532. const orc_int8 * ORC_RESTRICT ptr4;
  533. const orc_int8 * ORC_RESTRICT ptr5;
  534. orc_int8 var32;
  535. orc_int8 var33;
  536. orc_int8 var34;
  537. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  538. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  539. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  540. for (i = 0; i < n; i++) {
  541. /* 0: loadb */
  542. var32 = ptr4[i];
  543. /* 1: loadb */
  544. var33 = ptr5[i];
  545. /* 2: minub */
  546. var34 = ORC_MIN((orc_uint8)var32, (orc_uint8)var33);
  547. /* 3: storeb */
  548. ptr0[i] = var34;
  549. }
  550. }
  551. void
  552. emulate_mullb (OrcOpcodeExecutor *ex, int offset, int n)
  553. {
  554. int i;
  555. orc_int8 * ORC_RESTRICT ptr0;
  556. const orc_int8 * ORC_RESTRICT ptr4;
  557. const orc_int8 * ORC_RESTRICT ptr5;
  558. orc_int8 var32;
  559. orc_int8 var33;
  560. orc_int8 var34;
  561. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  562. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  563. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  564. for (i = 0; i < n; i++) {
  565. /* 0: loadb */
  566. var32 = ptr4[i];
  567. /* 1: loadb */
  568. var33 = ptr5[i];
  569. /* 2: mullb */
  570. var34 = (var32 * var33) & 0xff;
  571. /* 3: storeb */
  572. ptr0[i] = var34;
  573. }
  574. }
  575. void
  576. emulate_mulhsb (OrcOpcodeExecutor *ex, int offset, int n)
  577. {
  578. int i;
  579. orc_int8 * ORC_RESTRICT ptr0;
  580. const orc_int8 * ORC_RESTRICT ptr4;
  581. const orc_int8 * ORC_RESTRICT ptr5;
  582. orc_int8 var32;
  583. orc_int8 var33;
  584. orc_int8 var34;
  585. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  586. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  587. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  588. for (i = 0; i < n; i++) {
  589. /* 0: loadb */
  590. var32 = ptr4[i];
  591. /* 1: loadb */
  592. var33 = ptr5[i];
  593. /* 2: mulhsb */
  594. var34 = (var32 * var33) >> 8;
  595. /* 3: storeb */
  596. ptr0[i] = var34;
  597. }
  598. }
  599. void
  600. emulate_mulhub (OrcOpcodeExecutor *ex, int offset, int n)
  601. {
  602. int i;
  603. orc_int8 * ORC_RESTRICT ptr0;
  604. const orc_int8 * ORC_RESTRICT ptr4;
  605. const orc_int8 * ORC_RESTRICT ptr5;
  606. orc_int8 var32;
  607. orc_int8 var33;
  608. orc_int8 var34;
  609. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  610. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  611. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  612. for (i = 0; i < n; i++) {
  613. /* 0: loadb */
  614. var32 = ptr4[i];
  615. /* 1: loadb */
  616. var33 = ptr5[i];
  617. /* 2: mulhub */
  618. var34 = ((orc_uint32)(orc_uint8)var32 * (orc_uint32)(orc_uint8)var33) >> 8;
  619. /* 3: storeb */
  620. ptr0[i] = var34;
  621. }
  622. }
  623. void
  624. emulate_orb (OrcOpcodeExecutor *ex, int offset, int n)
  625. {
  626. int i;
  627. orc_int8 * ORC_RESTRICT ptr0;
  628. const orc_int8 * ORC_RESTRICT ptr4;
  629. const orc_int8 * ORC_RESTRICT ptr5;
  630. orc_int8 var32;
  631. orc_int8 var33;
  632. orc_int8 var34;
  633. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  634. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  635. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  636. for (i = 0; i < n; i++) {
  637. /* 0: loadb */
  638. var32 = ptr4[i];
  639. /* 1: loadb */
  640. var33 = ptr5[i];
  641. /* 2: orb */
  642. var34 = var32 | var33;
  643. /* 3: storeb */
  644. ptr0[i] = var34;
  645. }
  646. }
  647. void
  648. emulate_shlb (OrcOpcodeExecutor *ex, int offset, int n)
  649. {
  650. int i;
  651. orc_int8 * ORC_RESTRICT ptr0;
  652. const orc_int8 * ORC_RESTRICT ptr4;
  653. orc_int8 var32;
  654. orc_int8 var33;
  655. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  656. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  657. for (i = 0; i < n; i++) {
  658. /* 0: loadb */
  659. var32 = ptr4[i];
  660. /* 1: shlb */
  661. var33 = var32 << ((orc_union64 *)(ex->src_ptrs[1]))->i;
  662. /* 2: storeb */
  663. ptr0[i] = var33;
  664. }
  665. }
  666. void
  667. emulate_shrsb (OrcOpcodeExecutor *ex, int offset, int n)
  668. {
  669. int i;
  670. orc_int8 * ORC_RESTRICT ptr0;
  671. const orc_int8 * ORC_RESTRICT ptr4;
  672. orc_int8 var32;
  673. orc_int8 var33;
  674. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  675. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  676. for (i = 0; i < n; i++) {
  677. /* 0: loadb */
  678. var32 = ptr4[i];
  679. /* 1: shrsb */
  680. var33 = var32 >> ((orc_union64 *)(ex->src_ptrs[1]))->i;
  681. /* 2: storeb */
  682. ptr0[i] = var33;
  683. }
  684. }
  685. void
  686. emulate_shrub (OrcOpcodeExecutor *ex, int offset, int n)
  687. {
  688. int i;
  689. orc_int8 * ORC_RESTRICT ptr0;
  690. const orc_int8 * ORC_RESTRICT ptr4;
  691. orc_int8 var32;
  692. orc_int8 var33;
  693. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  694. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  695. for (i = 0; i < n; i++) {
  696. /* 0: loadb */
  697. var32 = ptr4[i];
  698. /* 1: shrub */
  699. var33 = ((orc_uint8)var32) >> ((orc_union64 *)(ex->src_ptrs[1]))->i;
  700. /* 2: storeb */
  701. ptr0[i] = var33;
  702. }
  703. }
  704. void
  705. emulate_signb (OrcOpcodeExecutor *ex, int offset, int n)
  706. {
  707. int i;
  708. orc_int8 * ORC_RESTRICT ptr0;
  709. const orc_int8 * ORC_RESTRICT ptr4;
  710. orc_int8 var32;
  711. orc_int8 var33;
  712. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  713. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  714. for (i = 0; i < n; i++) {
  715. /* 0: loadb */
  716. var32 = ptr4[i];
  717. /* 1: signb */
  718. var33 = ORC_CLAMP(var32,-1,1);
  719. /* 2: storeb */
  720. ptr0[i] = var33;
  721. }
  722. }
  723. void
  724. emulate_storeb (OrcOpcodeExecutor *ex, int offset, int n)
  725. {
  726. int i;
  727. orc_int8 * ORC_RESTRICT ptr0;
  728. const orc_int8 * ORC_RESTRICT ptr4;
  729. orc_int8 var32;
  730. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  731. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  732. for (i = 0; i < n; i++) {
  733. /* 0: loadb */
  734. var32 = ptr4[i];
  735. /* 1: storeb */
  736. ptr0[offset + i] = var32;
  737. }
  738. }
  739. void
  740. emulate_subb (OrcOpcodeExecutor *ex, int offset, int n)
  741. {
  742. int i;
  743. orc_int8 * ORC_RESTRICT ptr0;
  744. const orc_int8 * ORC_RESTRICT ptr4;
  745. const orc_int8 * ORC_RESTRICT ptr5;
  746. orc_int8 var32;
  747. orc_int8 var33;
  748. orc_int8 var34;
  749. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  750. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  751. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  752. for (i = 0; i < n; i++) {
  753. /* 0: loadb */
  754. var32 = ptr4[i];
  755. /* 1: loadb */
  756. var33 = ptr5[i];
  757. /* 2: subb */
  758. var34 = var32 - var33;
  759. /* 3: storeb */
  760. ptr0[i] = var34;
  761. }
  762. }
  763. void
  764. emulate_subssb (OrcOpcodeExecutor *ex, int offset, int n)
  765. {
  766. int i;
  767. orc_int8 * ORC_RESTRICT ptr0;
  768. const orc_int8 * ORC_RESTRICT ptr4;
  769. const orc_int8 * ORC_RESTRICT ptr5;
  770. orc_int8 var32;
  771. orc_int8 var33;
  772. orc_int8 var34;
  773. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  774. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  775. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  776. for (i = 0; i < n; i++) {
  777. /* 0: loadb */
  778. var32 = ptr4[i];
  779. /* 1: loadb */
  780. var33 = ptr5[i];
  781. /* 2: subssb */
  782. var34 = ORC_CLAMP_SB(var32 - var33);
  783. /* 3: storeb */
  784. ptr0[i] = var34;
  785. }
  786. }
  787. void
  788. emulate_subusb (OrcOpcodeExecutor *ex, int offset, int n)
  789. {
  790. int i;
  791. orc_int8 * ORC_RESTRICT ptr0;
  792. const orc_int8 * ORC_RESTRICT ptr4;
  793. const orc_int8 * ORC_RESTRICT ptr5;
  794. orc_int8 var32;
  795. orc_int8 var33;
  796. orc_int8 var34;
  797. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  798. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  799. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  800. for (i = 0; i < n; i++) {
  801. /* 0: loadb */
  802. var32 = ptr4[i];
  803. /* 1: loadb */
  804. var33 = ptr5[i];
  805. /* 2: subusb */
  806. var34 = ORC_CLAMP_UB((orc_uint8)var32 - (orc_uint8)var33);
  807. /* 3: storeb */
  808. ptr0[i] = var34;
  809. }
  810. }
  811. void
  812. emulate_xorb (OrcOpcodeExecutor *ex, int offset, int n)
  813. {
  814. int i;
  815. orc_int8 * ORC_RESTRICT ptr0;
  816. const orc_int8 * ORC_RESTRICT ptr4;
  817. const orc_int8 * ORC_RESTRICT ptr5;
  818. orc_int8 var32;
  819. orc_int8 var33;
  820. orc_int8 var34;
  821. ptr0 = (orc_int8 *)ex->dest_ptrs[0];
  822. ptr4 = (orc_int8 *)ex->src_ptrs[0];
  823. ptr5 = (orc_int8 *)ex->src_ptrs[1];
  824. for (i = 0; i < n; i++) {
  825. /* 0: loadb */
  826. var32 = ptr4[i];
  827. /* 1: loadb */
  828. var33 = ptr5[i];
  829. /* 2: xorb */
  830. var34 = var32 ^ var33;
  831. /* 3: storeb */
  832. ptr0[i] = var34;
  833. }
  834. }
  835. void
  836. emulate_absw (OrcOpcodeExecutor *ex, int offset, int n)
  837. {
  838. int i;
  839. orc_union16 * ORC_RESTRICT ptr0;
  840. const orc_union16 * ORC_RESTRICT ptr4;
  841. orc_union16 var32;
  842. orc_union16 var33;
  843. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  844. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  845. for (i = 0; i < n; i++) {
  846. /* 0: loadw */
  847. var32 = ptr4[i];
  848. /* 1: absw */
  849. var33.i = ORC_ABS(var32.i);
  850. /* 2: storew */
  851. ptr0[i] = var33;
  852. }
  853. }
  854. void
  855. emulate_addw (OrcOpcodeExecutor *ex, int offset, int n)
  856. {
  857. int i;
  858. orc_union16 * ORC_RESTRICT ptr0;
  859. const orc_union16 * ORC_RESTRICT ptr4;
  860. const orc_union16 * ORC_RESTRICT ptr5;
  861. orc_union16 var32;
  862. orc_union16 var33;
  863. orc_union16 var34;
  864. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  865. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  866. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  867. for (i = 0; i < n; i++) {
  868. /* 0: loadw */
  869. var32 = ptr4[i];
  870. /* 1: loadw */
  871. var33 = ptr5[i];
  872. /* 2: addw */
  873. var34.i = var32.i + var33.i;
  874. /* 3: storew */
  875. ptr0[i] = var34;
  876. }
  877. }
  878. void
  879. emulate_addssw (OrcOpcodeExecutor *ex, int offset, int n)
  880. {
  881. int i;
  882. orc_union16 * ORC_RESTRICT ptr0;
  883. const orc_union16 * ORC_RESTRICT ptr4;
  884. const orc_union16 * ORC_RESTRICT ptr5;
  885. orc_union16 var32;
  886. orc_union16 var33;
  887. orc_union16 var34;
  888. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  889. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  890. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  891. for (i = 0; i < n; i++) {
  892. /* 0: loadw */
  893. var32 = ptr4[i];
  894. /* 1: loadw */
  895. var33 = ptr5[i];
  896. /* 2: addssw */
  897. var34.i = ORC_CLAMP_SW(var32.i + var33.i);
  898. /* 3: storew */
  899. ptr0[i] = var34;
  900. }
  901. }
  902. void
  903. emulate_addusw (OrcOpcodeExecutor *ex, int offset, int n)
  904. {
  905. int i;
  906. orc_union16 * ORC_RESTRICT ptr0;
  907. const orc_union16 * ORC_RESTRICT ptr4;
  908. const orc_union16 * ORC_RESTRICT ptr5;
  909. orc_union16 var32;
  910. orc_union16 var33;
  911. orc_union16 var34;
  912. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  913. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  914. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  915. for (i = 0; i < n; i++) {
  916. /* 0: loadw */
  917. var32 = ptr4[i];
  918. /* 1: loadw */
  919. var33 = ptr5[i];
  920. /* 2: addusw */
  921. var34.i = ORC_CLAMP_UW((orc_uint16)var32.i + (orc_uint16)var33.i);
  922. /* 3: storew */
  923. ptr0[i] = var34;
  924. }
  925. }
  926. void
  927. emulate_andw (OrcOpcodeExecutor *ex, int offset, int n)
  928. {
  929. int i;
  930. orc_union16 * ORC_RESTRICT ptr0;
  931. const orc_union16 * ORC_RESTRICT ptr4;
  932. const orc_union16 * ORC_RESTRICT ptr5;
  933. orc_union16 var32;
  934. orc_union16 var33;
  935. orc_union16 var34;
  936. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  937. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  938. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  939. for (i = 0; i < n; i++) {
  940. /* 0: loadw */
  941. var32 = ptr4[i];
  942. /* 1: loadw */
  943. var33 = ptr5[i];
  944. /* 2: andw */
  945. var34.i = var32.i & var33.i;
  946. /* 3: storew */
  947. ptr0[i] = var34;
  948. }
  949. }
  950. void
  951. emulate_andnw (OrcOpcodeExecutor *ex, int offset, int n)
  952. {
  953. int i;
  954. orc_union16 * ORC_RESTRICT ptr0;
  955. const orc_union16 * ORC_RESTRICT ptr4;
  956. const orc_union16 * ORC_RESTRICT ptr5;
  957. orc_union16 var32;
  958. orc_union16 var33;
  959. orc_union16 var34;
  960. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  961. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  962. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  963. for (i = 0; i < n; i++) {
  964. /* 0: loadw */
  965. var32 = ptr4[i];
  966. /* 1: loadw */
  967. var33 = ptr5[i];
  968. /* 2: andnw */
  969. var34.i = (~var32.i) & var33.i;
  970. /* 3: storew */
  971. ptr0[i] = var34;
  972. }
  973. }
  974. void
  975. emulate_avgsw (OrcOpcodeExecutor *ex, int offset, int n)
  976. {
  977. int i;
  978. orc_union16 * ORC_RESTRICT ptr0;
  979. const orc_union16 * ORC_RESTRICT ptr4;
  980. const orc_union16 * ORC_RESTRICT ptr5;
  981. orc_union16 var32;
  982. orc_union16 var33;
  983. orc_union16 var34;
  984. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  985. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  986. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  987. for (i = 0; i < n; i++) {
  988. /* 0: loadw */
  989. var32 = ptr4[i];
  990. /* 1: loadw */
  991. var33 = ptr5[i];
  992. /* 2: avgsw */
  993. var34.i = (var32.i + var33.i + 1)>>1;
  994. /* 3: storew */
  995. ptr0[i] = var34;
  996. }
  997. }
  998. void
  999. emulate_avguw (OrcOpcodeExecutor *ex, int offset, int n)
  1000. {
  1001. int i;
  1002. orc_union16 * ORC_RESTRICT ptr0;
  1003. const orc_union16 * ORC_RESTRICT ptr4;
  1004. const orc_union16 * ORC_RESTRICT ptr5;
  1005. orc_union16 var32;
  1006. orc_union16 var33;
  1007. orc_union16 var34;
  1008. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1009. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1010. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1011. for (i = 0; i < n; i++) {
  1012. /* 0: loadw */
  1013. var32 = ptr4[i];
  1014. /* 1: loadw */
  1015. var33 = ptr5[i];
  1016. /* 2: avguw */
  1017. var34.i = ((orc_uint16)var32.i + (orc_uint16)var33.i + 1)>>1;
  1018. /* 3: storew */
  1019. ptr0[i] = var34;
  1020. }
  1021. }
  1022. void
  1023. emulate_cmpeqw (OrcOpcodeExecutor *ex, int offset, int n)
  1024. {
  1025. int i;
  1026. orc_union16 * ORC_RESTRICT ptr0;
  1027. const orc_union16 * ORC_RESTRICT ptr4;
  1028. const orc_union16 * ORC_RESTRICT ptr5;
  1029. orc_union16 var32;
  1030. orc_union16 var33;
  1031. orc_union16 var34;
  1032. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1033. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1034. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1035. for (i = 0; i < n; i++) {
  1036. /* 0: loadw */
  1037. var32 = ptr4[i];
  1038. /* 1: loadw */
  1039. var33 = ptr5[i];
  1040. /* 2: cmpeqw */
  1041. var34.i = (var32.i == var33.i) ? (~0) : 0;
  1042. /* 3: storew */
  1043. ptr0[i] = var34;
  1044. }
  1045. }
  1046. void
  1047. emulate_cmpgtsw (OrcOpcodeExecutor *ex, int offset, int n)
  1048. {
  1049. int i;
  1050. orc_union16 * ORC_RESTRICT ptr0;
  1051. const orc_union16 * ORC_RESTRICT ptr4;
  1052. const orc_union16 * ORC_RESTRICT ptr5;
  1053. orc_union16 var32;
  1054. orc_union16 var33;
  1055. orc_union16 var34;
  1056. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1057. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1058. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1059. for (i = 0; i < n; i++) {
  1060. /* 0: loadw */
  1061. var32 = ptr4[i];
  1062. /* 1: loadw */
  1063. var33 = ptr5[i];
  1064. /* 2: cmpgtsw */
  1065. var34.i = (var32.i > var33.i) ? (~0) : 0;
  1066. /* 3: storew */
  1067. ptr0[i] = var34;
  1068. }
  1069. }
  1070. void
  1071. emulate_copyw (OrcOpcodeExecutor *ex, int offset, int n)
  1072. {
  1073. int i;
  1074. orc_union16 * ORC_RESTRICT ptr0;
  1075. const orc_union16 * ORC_RESTRICT ptr4;
  1076. orc_union16 var32;
  1077. orc_union16 var33;
  1078. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1079. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1080. for (i = 0; i < n; i++) {
  1081. /* 0: loadw */
  1082. var32 = ptr4[i];
  1083. /* 1: copyw */
  1084. var33.i = var32.i;
  1085. /* 2: storew */
  1086. ptr0[i] = var33;
  1087. }
  1088. }
  1089. void
  1090. emulate_div255w (OrcOpcodeExecutor *ex, int offset, int n)
  1091. {
  1092. int i;
  1093. orc_union16 * ORC_RESTRICT ptr0;
  1094. const orc_union16 * ORC_RESTRICT ptr4;
  1095. orc_union16 var32;
  1096. orc_union16 var33;
  1097. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1098. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1099. for (i = 0; i < n; i++) {
  1100. /* 0: loadw */
  1101. var32 = ptr4[i];
  1102. /* 1: div255w */
  1103. var33.i = ((orc_uint16)(((orc_uint16)(var32.i+128)) + (((orc_uint16)(var32.i+128))>>8)))>>8;
  1104. /* 2: storew */
  1105. ptr0[i] = var33;
  1106. }
  1107. }
  1108. void
  1109. emulate_divluw (OrcOpcodeExecutor *ex, int offset, int n)
  1110. {
  1111. int i;
  1112. orc_union16 * ORC_RESTRICT ptr0;
  1113. const orc_union16 * ORC_RESTRICT ptr4;
  1114. const orc_union16 * ORC_RESTRICT ptr5;
  1115. orc_union16 var32;
  1116. orc_union16 var33;
  1117. orc_union16 var34;
  1118. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1119. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1120. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1121. for (i = 0; i < n; i++) {
  1122. /* 0: loadw */
  1123. var32 = ptr4[i];
  1124. /* 1: loadw */
  1125. var33 = ptr5[i];
  1126. /* 2: divluw */
  1127. var34.i = ((var33.i&0xff) == 0) ? 255 : ORC_CLAMP_UB(((orc_uint16)var32.i)/((orc_uint16)var33.i&0xff));
  1128. /* 3: storew */
  1129. ptr0[i] = var34;
  1130. }
  1131. }
  1132. void
  1133. emulate_loadw (OrcOpcodeExecutor *ex, int offset, int n)
  1134. {
  1135. int i;
  1136. orc_union16 * ORC_RESTRICT ptr0;
  1137. const orc_union16 * ORC_RESTRICT ptr4;
  1138. orc_union16 var32;
  1139. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1140. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1141. for (i = 0; i < n; i++) {
  1142. /* 0: loadw */
  1143. var32 = ptr4[offset + i];
  1144. /* 1: storew */
  1145. ptr0[i] = var32;
  1146. }
  1147. }
  1148. void
  1149. emulate_loadoffw (OrcOpcodeExecutor *ex, int offset, int n)
  1150. {
  1151. int i;
  1152. orc_union16 * ORC_RESTRICT ptr0;
  1153. const orc_union16 * ORC_RESTRICT ptr4;
  1154. orc_union16 var32;
  1155. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1156. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1157. for (i = 0; i < n; i++) {
  1158. /* 0: loadoffw */
  1159. var32 = ptr4[offset + i + ((orc_union64 *)(ex->src_ptrs[1]))->i];
  1160. /* 1: storew */
  1161. ptr0[i] = var32;
  1162. }
  1163. }
  1164. void
  1165. emulate_loadpw (OrcOpcodeExecutor *ex, int offset, int n)
  1166. {
  1167. int i;
  1168. orc_union16 * ORC_RESTRICT ptr0;
  1169. orc_union16 var32;
  1170. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1171. /* 0: loadpw */
  1172. var32.i = ((orc_union64 *)(ex->src_ptrs[0]))->i;
  1173. for (i = 0; i < n; i++) {
  1174. /* 1: storew */
  1175. ptr0[i] = var32;
  1176. }
  1177. }
  1178. void
  1179. emulate_maxsw (OrcOpcodeExecutor *ex, int offset, int n)
  1180. {
  1181. int i;
  1182. orc_union16 * ORC_RESTRICT ptr0;
  1183. const orc_union16 * ORC_RESTRICT ptr4;
  1184. const orc_union16 * ORC_RESTRICT ptr5;
  1185. orc_union16 var32;
  1186. orc_union16 var33;
  1187. orc_union16 var34;
  1188. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1189. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1190. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1191. for (i = 0; i < n; i++) {
  1192. /* 0: loadw */
  1193. var32 = ptr4[i];
  1194. /* 1: loadw */
  1195. var33 = ptr5[i];
  1196. /* 2: maxsw */
  1197. var34.i = ORC_MAX(var32.i, var33.i);
  1198. /* 3: storew */
  1199. ptr0[i] = var34;
  1200. }
  1201. }
  1202. void
  1203. emulate_maxuw (OrcOpcodeExecutor *ex, int offset, int n)
  1204. {
  1205. int i;
  1206. orc_union16 * ORC_RESTRICT ptr0;
  1207. const orc_union16 * ORC_RESTRICT ptr4;
  1208. const orc_union16 * ORC_RESTRICT ptr5;
  1209. orc_union16 var32;
  1210. orc_union16 var33;
  1211. orc_union16 var34;
  1212. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1213. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1214. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1215. for (i = 0; i < n; i++) {
  1216. /* 0: loadw */
  1217. var32 = ptr4[i];
  1218. /* 1: loadw */
  1219. var33 = ptr5[i];
  1220. /* 2: maxuw */
  1221. var34.i = ORC_MAX((orc_uint16)var32.i, (orc_uint16)var33.i);
  1222. /* 3: storew */
  1223. ptr0[i] = var34;
  1224. }
  1225. }
  1226. void
  1227. emulate_minsw (OrcOpcodeExecutor *ex, int offset, int n)
  1228. {
  1229. int i;
  1230. orc_union16 * ORC_RESTRICT ptr0;
  1231. const orc_union16 * ORC_RESTRICT ptr4;
  1232. const orc_union16 * ORC_RESTRICT ptr5;
  1233. orc_union16 var32;
  1234. orc_union16 var33;
  1235. orc_union16 var34;
  1236. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1237. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1238. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1239. for (i = 0; i < n; i++) {
  1240. /* 0: loadw */
  1241. var32 = ptr4[i];
  1242. /* 1: loadw */
  1243. var33 = ptr5[i];
  1244. /* 2: minsw */
  1245. var34.i = ORC_MIN(var32.i, var33.i);
  1246. /* 3: storew */
  1247. ptr0[i] = var34;
  1248. }
  1249. }
  1250. void
  1251. emulate_minuw (OrcOpcodeExecutor *ex, int offset, int n)
  1252. {
  1253. int i;
  1254. orc_union16 * ORC_RESTRICT ptr0;
  1255. const orc_union16 * ORC_RESTRICT ptr4;
  1256. const orc_union16 * ORC_RESTRICT ptr5;
  1257. orc_union16 var32;
  1258. orc_union16 var33;
  1259. orc_union16 var34;
  1260. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1261. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1262. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1263. for (i = 0; i < n; i++) {
  1264. /* 0: loadw */
  1265. var32 = ptr4[i];
  1266. /* 1: loadw */
  1267. var33 = ptr5[i];
  1268. /* 2: minuw */
  1269. var34.i = ORC_MIN((orc_uint16)var32.i, (orc_uint16)var33.i);
  1270. /* 3: storew */
  1271. ptr0[i] = var34;
  1272. }
  1273. }
  1274. void
  1275. emulate_mullw (OrcOpcodeExecutor *ex, int offset, int n)
  1276. {
  1277. int i;
  1278. orc_union16 * ORC_RESTRICT ptr0;
  1279. const orc_union16 * ORC_RESTRICT ptr4;
  1280. const orc_union16 * ORC_RESTRICT ptr5;
  1281. orc_union16 var32;
  1282. orc_union16 var33;
  1283. orc_union16 var34;
  1284. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1285. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1286. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1287. for (i = 0; i < n; i++) {
  1288. /* 0: loadw */
  1289. var32 = ptr4[i];
  1290. /* 1: loadw */
  1291. var33 = ptr5[i];
  1292. /* 2: mullw */
  1293. var34.i = (var32.i * var33.i) & 0xffff;
  1294. /* 3: storew */
  1295. ptr0[i] = var34;
  1296. }
  1297. }
  1298. void
  1299. emulate_mulhsw (OrcOpcodeExecutor *ex, int offset, int n)
  1300. {
  1301. int i;
  1302. orc_union16 * ORC_RESTRICT ptr0;
  1303. const orc_union16 * ORC_RESTRICT ptr4;
  1304. const orc_union16 * ORC_RESTRICT ptr5;
  1305. orc_union16 var32;
  1306. orc_union16 var33;
  1307. orc_union16 var34;
  1308. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1309. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1310. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1311. for (i = 0; i < n; i++) {
  1312. /* 0: loadw */
  1313. var32 = ptr4[i];
  1314. /* 1: loadw */
  1315. var33 = ptr5[i];
  1316. /* 2: mulhsw */
  1317. var34.i = (var32.i * var33.i) >> 16;
  1318. /* 3: storew */
  1319. ptr0[i] = var34;
  1320. }
  1321. }
  1322. void
  1323. emulate_mulhuw (OrcOpcodeExecutor *ex, int offset, int n)
  1324. {
  1325. int i;
  1326. orc_union16 * ORC_RESTRICT ptr0;
  1327. const orc_union16 * ORC_RESTRICT ptr4;
  1328. const orc_union16 * ORC_RESTRICT ptr5;
  1329. orc_union16 var32;
  1330. orc_union16 var33;
  1331. orc_union16 var34;
  1332. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1333. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1334. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1335. for (i = 0; i < n; i++) {
  1336. /* 0: loadw */
  1337. var32 = ptr4[i];
  1338. /* 1: loadw */
  1339. var33 = ptr5[i];
  1340. /* 2: mulhuw */
  1341. var34.i = ((orc_uint32)((orc_uint16)var32.i) * (orc_uint32)((orc_uint16)var33.i)) >> 16;
  1342. /* 3: storew */
  1343. ptr0[i] = var34;
  1344. }
  1345. }
  1346. void
  1347. emulate_orw (OrcOpcodeExecutor *ex, int offset, int n)
  1348. {
  1349. int i;
  1350. orc_union16 * ORC_RESTRICT ptr0;
  1351. const orc_union16 * ORC_RESTRICT ptr4;
  1352. const orc_union16 * ORC_RESTRICT ptr5;
  1353. orc_union16 var32;
  1354. orc_union16 var33;
  1355. orc_union16 var34;
  1356. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1357. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1358. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1359. for (i = 0; i < n; i++) {
  1360. /* 0: loadw */
  1361. var32 = ptr4[i];
  1362. /* 1: loadw */
  1363. var33 = ptr5[i];
  1364. /* 2: orw */
  1365. var34.i = var32.i | var33.i;
  1366. /* 3: storew */
  1367. ptr0[i] = var34;
  1368. }
  1369. }
  1370. void
  1371. emulate_shlw (OrcOpcodeExecutor *ex, int offset, int n)
  1372. {
  1373. int i;
  1374. orc_union16 * ORC_RESTRICT ptr0;
  1375. const orc_union16 * ORC_RESTRICT ptr4;
  1376. orc_union16 var32;
  1377. orc_union16 var33;
  1378. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1379. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1380. for (i = 0; i < n; i++) {
  1381. /* 0: loadw */
  1382. var32 = ptr4[i];
  1383. /* 1: shlw */
  1384. var33.i = var32.i << ((orc_union64 *)(ex->src_ptrs[1]))->i;
  1385. /* 2: storew */
  1386. ptr0[i] = var33;
  1387. }
  1388. }
  1389. void
  1390. emulate_shrsw (OrcOpcodeExecutor *ex, int offset, int n)
  1391. {
  1392. int i;
  1393. orc_union16 * ORC_RESTRICT ptr0;
  1394. const orc_union16 * ORC_RESTRICT ptr4;
  1395. orc_union16 var32;
  1396. orc_union16 var33;
  1397. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1398. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1399. for (i = 0; i < n; i++) {
  1400. /* 0: loadw */
  1401. var32 = ptr4[i];
  1402. /* 1: shrsw */
  1403. var33.i = var32.i >> ((orc_union64 *)(ex->src_ptrs[1]))->i;
  1404. /* 2: storew */
  1405. ptr0[i] = var33;
  1406. }
  1407. }
  1408. void
  1409. emulate_shruw (OrcOpcodeExecutor *ex, int offset, int n)
  1410. {
  1411. int i;
  1412. orc_union16 * ORC_RESTRICT ptr0;
  1413. const orc_union16 * ORC_RESTRICT ptr4;
  1414. orc_union16 var32;
  1415. orc_union16 var33;
  1416. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1417. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1418. for (i = 0; i < n; i++) {
  1419. /* 0: loadw */
  1420. var32 = ptr4[i];
  1421. /* 1: shruw */
  1422. var33.i = ((orc_uint16)var32.i) >> ((orc_union64 *)(ex->src_ptrs[1]))->i;
  1423. /* 2: storew */
  1424. ptr0[i] = var33;
  1425. }
  1426. }
  1427. void
  1428. emulate_signw (OrcOpcodeExecutor *ex, int offset, int n)
  1429. {
  1430. int i;
  1431. orc_union16 * ORC_RESTRICT ptr0;
  1432. const orc_union16 * ORC_RESTRICT ptr4;
  1433. orc_union16 var32;
  1434. orc_union16 var33;
  1435. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1436. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1437. for (i = 0; i < n; i++) {
  1438. /* 0: loadw */
  1439. var32 = ptr4[i];
  1440. /* 1: signw */
  1441. var33.i = ORC_CLAMP(var32.i,-1,1);
  1442. /* 2: storew */
  1443. ptr0[i] = var33;
  1444. }
  1445. }
  1446. void
  1447. emulate_storew (OrcOpcodeExecutor *ex, int offset, int n)
  1448. {
  1449. int i;
  1450. orc_union16 * ORC_RESTRICT ptr0;
  1451. const orc_union16 * ORC_RESTRICT ptr4;
  1452. orc_union16 var32;
  1453. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1454. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1455. for (i = 0; i < n; i++) {
  1456. /* 0: loadw */
  1457. var32 = ptr4[i];
  1458. /* 1: storew */
  1459. ptr0[offset + i] = var32;
  1460. }
  1461. }
  1462. void
  1463. emulate_subw (OrcOpcodeExecutor *ex, int offset, int n)
  1464. {
  1465. int i;
  1466. orc_union16 * ORC_RESTRICT ptr0;
  1467. const orc_union16 * ORC_RESTRICT ptr4;
  1468. const orc_union16 * ORC_RESTRICT ptr5;
  1469. orc_union16 var32;
  1470. orc_union16 var33;
  1471. orc_union16 var34;
  1472. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1473. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1474. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1475. for (i = 0; i < n; i++) {
  1476. /* 0: loadw */
  1477. var32 = ptr4[i];
  1478. /* 1: loadw */
  1479. var33 = ptr5[i];
  1480. /* 2: subw */
  1481. var34.i = var32.i - var33.i;
  1482. /* 3: storew */
  1483. ptr0[i] = var34;
  1484. }
  1485. }
  1486. void
  1487. emulate_subssw (OrcOpcodeExecutor *ex, int offset, int n)
  1488. {
  1489. int i;
  1490. orc_union16 * ORC_RESTRICT ptr0;
  1491. const orc_union16 * ORC_RESTRICT ptr4;
  1492. const orc_union16 * ORC_RESTRICT ptr5;
  1493. orc_union16 var32;
  1494. orc_union16 var33;
  1495. orc_union16 var34;
  1496. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1497. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1498. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1499. for (i = 0; i < n; i++) {
  1500. /* 0: loadw */
  1501. var32 = ptr4[i];
  1502. /* 1: loadw */
  1503. var33 = ptr5[i];
  1504. /* 2: subssw */
  1505. var34.i = ORC_CLAMP_SW(var32.i - var33.i);
  1506. /* 3: storew */
  1507. ptr0[i] = var34;
  1508. }
  1509. }
  1510. void
  1511. emulate_subusw (OrcOpcodeExecutor *ex, int offset, int n)
  1512. {
  1513. int i;
  1514. orc_union16 * ORC_RESTRICT ptr0;
  1515. const orc_union16 * ORC_RESTRICT ptr4;
  1516. const orc_union16 * ORC_RESTRICT ptr5;
  1517. orc_union16 var32;
  1518. orc_union16 var33;
  1519. orc_union16 var34;
  1520. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1521. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1522. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1523. for (i = 0; i < n; i++) {
  1524. /* 0: loadw */
  1525. var32 = ptr4[i];
  1526. /* 1: loadw */
  1527. var33 = ptr5[i];
  1528. /* 2: subusw */
  1529. var34.i = ORC_CLAMP_UW((orc_uint16)var32.i - (orc_uint16)var33.i);
  1530. /* 3: storew */
  1531. ptr0[i] = var34;
  1532. }
  1533. }
  1534. void
  1535. emulate_xorw (OrcOpcodeExecutor *ex, int offset, int n)
  1536. {
  1537. int i;
  1538. orc_union16 * ORC_RESTRICT ptr0;
  1539. const orc_union16 * ORC_RESTRICT ptr4;
  1540. const orc_union16 * ORC_RESTRICT ptr5;
  1541. orc_union16 var32;
  1542. orc_union16 var33;
  1543. orc_union16 var34;
  1544. ptr0 = (orc_union16 *)ex->dest_ptrs[0];
  1545. ptr4 = (orc_union16 *)ex->src_ptrs[0];
  1546. ptr5 = (orc_union16 *)ex->src_ptrs[1];
  1547. for (i = 0; i < n; i++) {
  1548. /* 0: loadw */
  1549. var32 = ptr4[i];
  1550. /* 1: loadw */
  1551. var33 = ptr5[i];
  1552. /* 2: xorw */
  1553. var34.i = var32.i ^ var33.i;
  1554. /* 3: storew */
  1555. ptr0[i] = var34;
  1556. }
  1557. }
  1558. void
  1559. emulate_absl (OrcOpcodeExecutor *ex, int offset, int n)
  1560. {
  1561. int i;
  1562. orc_union32 * ORC_RESTRICT ptr0;
  1563. const orc_union32 * ORC_RESTRICT ptr4;
  1564. orc_union32 var32;
  1565. orc_union32 var33;
  1566. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1567. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1568. for (i = 0; i < n; i++) {
  1569. /* 0: loadl */
  1570. var32 = ptr4[i];
  1571. /* 1: absl */
  1572. var33.i = ORC_ABS(var32.i);
  1573. /* 2: storel */
  1574. ptr0[i] = var33;
  1575. }
  1576. }
  1577. void
  1578. emulate_addl (OrcOpcodeExecutor *ex, int offset, int n)
  1579. {
  1580. int i;
  1581. orc_union32 * ORC_RESTRICT ptr0;
  1582. const orc_union32 * ORC_RESTRICT ptr4;
  1583. const orc_union32 * ORC_RESTRICT ptr5;
  1584. orc_union32 var32;
  1585. orc_union32 var33;
  1586. orc_union32 var34;
  1587. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1588. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1589. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1590. for (i = 0; i < n; i++) {
  1591. /* 0: loadl */
  1592. var32 = ptr4[i];
  1593. /* 1: loadl */
  1594. var33 = ptr5[i];
  1595. /* 2: addl */
  1596. var34.i = var32.i + var33.i;
  1597. /* 3: storel */
  1598. ptr0[i] = var34;
  1599. }
  1600. }
  1601. void
  1602. emulate_addssl (OrcOpcodeExecutor *ex, int offset, int n)
  1603. {
  1604. int i;
  1605. orc_union32 * ORC_RESTRICT ptr0;
  1606. const orc_union32 * ORC_RESTRICT ptr4;
  1607. const orc_union32 * ORC_RESTRICT ptr5;
  1608. orc_union32 var32;
  1609. orc_union32 var33;
  1610. orc_union32 var34;
  1611. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1612. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1613. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1614. for (i = 0; i < n; i++) {
  1615. /* 0: loadl */
  1616. var32 = ptr4[i];
  1617. /* 1: loadl */
  1618. var33 = ptr5[i];
  1619. /* 2: addssl */
  1620. var34.i = ORC_CLAMP_SL((orc_int64)var32.i + (orc_int64)var33.i);
  1621. /* 3: storel */
  1622. ptr0[i] = var34;
  1623. }
  1624. }
  1625. void
  1626. emulate_addusl (OrcOpcodeExecutor *ex, int offset, int n)
  1627. {
  1628. int i;
  1629. orc_union32 * ORC_RESTRICT ptr0;
  1630. const orc_union32 * ORC_RESTRICT ptr4;
  1631. const orc_union32 * ORC_RESTRICT ptr5;
  1632. orc_union32 var32;
  1633. orc_union32 var33;
  1634. orc_union32 var34;
  1635. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1636. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1637. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1638. for (i = 0; i < n; i++) {
  1639. /* 0: loadl */
  1640. var32 = ptr4[i];
  1641. /* 1: loadl */
  1642. var33 = ptr5[i];
  1643. /* 2: addusl */
  1644. var34.i = ORC_CLAMP_UL((orc_int64)(orc_uint32)var32.i + (orc_int64)(orc_uint32)var33.i);
  1645. /* 3: storel */
  1646. ptr0[i] = var34;
  1647. }
  1648. }
  1649. void
  1650. emulate_andl (OrcOpcodeExecutor *ex, int offset, int n)
  1651. {
  1652. int i;
  1653. orc_union32 * ORC_RESTRICT ptr0;
  1654. const orc_union32 * ORC_RESTRICT ptr4;
  1655. const orc_union32 * ORC_RESTRICT ptr5;
  1656. orc_union32 var32;
  1657. orc_union32 var33;
  1658. orc_union32 var34;
  1659. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1660. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1661. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1662. for (i = 0; i < n; i++) {
  1663. /* 0: loadl */
  1664. var32 = ptr4[i];
  1665. /* 1: loadl */
  1666. var33 = ptr5[i];
  1667. /* 2: andl */
  1668. var34.i = var32.i & var33.i;
  1669. /* 3: storel */
  1670. ptr0[i] = var34;
  1671. }
  1672. }
  1673. void
  1674. emulate_andnl (OrcOpcodeExecutor *ex, int offset, int n)
  1675. {
  1676. int i;
  1677. orc_union32 * ORC_RESTRICT ptr0;
  1678. const orc_union32 * ORC_RESTRICT ptr4;
  1679. const orc_union32 * ORC_RESTRICT ptr5;
  1680. orc_union32 var32;
  1681. orc_union32 var33;
  1682. orc_union32 var34;
  1683. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1684. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1685. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1686. for (i = 0; i < n; i++) {
  1687. /* 0: loadl */
  1688. var32 = ptr4[i];
  1689. /* 1: loadl */
  1690. var33 = ptr5[i];
  1691. /* 2: andnl */
  1692. var34.i = (~var32.i) & var33.i;
  1693. /* 3: storel */
  1694. ptr0[i] = var34;
  1695. }
  1696. }
  1697. void
  1698. emulate_avgsl (OrcOpcodeExecutor *ex, int offset, int n)
  1699. {
  1700. int i;
  1701. orc_union32 * ORC_RESTRICT ptr0;
  1702. const orc_union32 * ORC_RESTRICT ptr4;
  1703. const orc_union32 * ORC_RESTRICT ptr5;
  1704. orc_union32 var32;
  1705. orc_union32 var33;
  1706. orc_union32 var34;
  1707. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1708. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1709. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1710. for (i = 0; i < n; i++) {
  1711. /* 0: loadl */
  1712. var32 = ptr4[i];
  1713. /* 1: loadl */
  1714. var33 = ptr5[i];
  1715. /* 2: avgsl */
  1716. var34.i = ((orc_int64)var32.i + (orc_int64)var33.i + 1)>>1;
  1717. /* 3: storel */
  1718. ptr0[i] = var34;
  1719. }
  1720. }
  1721. void
  1722. emulate_avgul (OrcOpcodeExecutor *ex, int offset, int n)
  1723. {
  1724. int i;
  1725. orc_union32 * ORC_RESTRICT ptr0;
  1726. const orc_union32 * ORC_RESTRICT ptr4;
  1727. const orc_union32 * ORC_RESTRICT ptr5;
  1728. orc_union32 var32;
  1729. orc_union32 var33;
  1730. orc_union32 var34;
  1731. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1732. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1733. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1734. for (i = 0; i < n; i++) {
  1735. /* 0: loadl */
  1736. var32 = ptr4[i];
  1737. /* 1: loadl */
  1738. var33 = ptr5[i];
  1739. /* 2: avgul */
  1740. var34.i = ((orc_uint64)(orc_uint32)var32.i + (orc_uint64)(orc_uint32)var33.i + 1)>>1;
  1741. /* 3: storel */
  1742. ptr0[i] = var34;
  1743. }
  1744. }
  1745. void
  1746. emulate_cmpeql (OrcOpcodeExecutor *ex, int offset, int n)
  1747. {
  1748. int i;
  1749. orc_union32 * ORC_RESTRICT ptr0;
  1750. const orc_union32 * ORC_RESTRICT ptr4;
  1751. const orc_union32 * ORC_RESTRICT ptr5;
  1752. orc_union32 var32;
  1753. orc_union32 var33;
  1754. orc_union32 var34;
  1755. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1756. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1757. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1758. for (i = 0; i < n; i++) {
  1759. /* 0: loadl */
  1760. var32 = ptr4[i];
  1761. /* 1: loadl */
  1762. var33 = ptr5[i];
  1763. /* 2: cmpeql */
  1764. var34.i = (var32.i == var33.i) ? (~0) : 0;
  1765. /* 3: storel */
  1766. ptr0[i] = var34;
  1767. }
  1768. }
  1769. void
  1770. emulate_cmpgtsl (OrcOpcodeExecutor *ex, int offset, int n)
  1771. {
  1772. int i;
  1773. orc_union32 * ORC_RESTRICT ptr0;
  1774. const orc_union32 * ORC_RESTRICT ptr4;
  1775. const orc_union32 * ORC_RESTRICT ptr5;
  1776. orc_union32 var32;
  1777. orc_union32 var33;
  1778. orc_union32 var34;
  1779. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1780. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1781. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1782. for (i = 0; i < n; i++) {
  1783. /* 0: loadl */
  1784. var32 = ptr4[i];
  1785. /* 1: loadl */
  1786. var33 = ptr5[i];
  1787. /* 2: cmpgtsl */
  1788. var34.i = (var32.i > var33.i) ? (~0) : 0;
  1789. /* 3: storel */
  1790. ptr0[i] = var34;
  1791. }
  1792. }
  1793. void
  1794. emulate_copyl (OrcOpcodeExecutor *ex, int offset, int n)
  1795. {
  1796. int i;
  1797. orc_union32 * ORC_RESTRICT ptr0;
  1798. const orc_union32 * ORC_RESTRICT ptr4;
  1799. orc_union32 var32;
  1800. orc_union32 var33;
  1801. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1802. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1803. for (i = 0; i < n; i++) {
  1804. /* 0: loadl */
  1805. var32 = ptr4[i];
  1806. /* 1: copyl */
  1807. var33.i = var32.i;
  1808. /* 2: storel */
  1809. ptr0[i] = var33;
  1810. }
  1811. }
  1812. void
  1813. emulate_loadl (OrcOpcodeExecutor *ex, int offset, int n)
  1814. {
  1815. int i;
  1816. orc_union32 * ORC_RESTRICT ptr0;
  1817. const orc_union32 * ORC_RESTRICT ptr4;
  1818. orc_union32 var32;
  1819. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1820. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1821. for (i = 0; i < n; i++) {
  1822. /* 0: loadl */
  1823. var32 = ptr4[offset + i];
  1824. /* 1: storel */
  1825. ptr0[i] = var32;
  1826. }
  1827. }
  1828. void
  1829. emulate_loadoffl (OrcOpcodeExecutor *ex, int offset, int n)
  1830. {
  1831. int i;
  1832. orc_union32 * ORC_RESTRICT ptr0;
  1833. const orc_union32 * ORC_RESTRICT ptr4;
  1834. orc_union32 var32;
  1835. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1836. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1837. for (i = 0; i < n; i++) {
  1838. /* 0: loadoffl */
  1839. var32 = ptr4[offset + i + ((orc_union64 *)(ex->src_ptrs[1]))->i];
  1840. /* 1: storel */
  1841. ptr0[i] = var32;
  1842. }
  1843. }
  1844. void
  1845. emulate_loadpl (OrcOpcodeExecutor *ex, int offset, int n)
  1846. {
  1847. int i;
  1848. orc_union32 * ORC_RESTRICT ptr0;
  1849. orc_union32 var32;
  1850. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1851. /* 0: loadpl */
  1852. var32.i = ((orc_union64 *)(ex->src_ptrs[0]))->i;
  1853. for (i = 0; i < n; i++) {
  1854. /* 1: storel */
  1855. ptr0[i] = var32;
  1856. }
  1857. }
  1858. void
  1859. emulate_maxsl (OrcOpcodeExecutor *ex, int offset, int n)
  1860. {
  1861. int i;
  1862. orc_union32 * ORC_RESTRICT ptr0;
  1863. const orc_union32 * ORC_RESTRICT ptr4;
  1864. const orc_union32 * ORC_RESTRICT ptr5;
  1865. orc_union32 var32;
  1866. orc_union32 var33;
  1867. orc_union32 var34;
  1868. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1869. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1870. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1871. for (i = 0; i < n; i++) {
  1872. /* 0: loadl */
  1873. var32 = ptr4[i];
  1874. /* 1: loadl */
  1875. var33 = ptr5[i];
  1876. /* 2: maxsl */
  1877. var34.i = ORC_MAX(var32.i, var33.i);
  1878. /* 3: storel */
  1879. ptr0[i] = var34;
  1880. }
  1881. }
  1882. void
  1883. emulate_maxul (OrcOpcodeExecutor *ex, int offset, int n)
  1884. {
  1885. int i;
  1886. orc_union32 * ORC_RESTRICT ptr0;
  1887. const orc_union32 * ORC_RESTRICT ptr4;
  1888. const orc_union32 * ORC_RESTRICT ptr5;
  1889. orc_union32 var32;
  1890. orc_union32 var33;
  1891. orc_union32 var34;
  1892. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1893. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1894. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1895. for (i = 0; i < n; i++) {
  1896. /* 0: loadl */
  1897. var32 = ptr4[i];
  1898. /* 1: loadl */
  1899. var33 = ptr5[i];
  1900. /* 2: maxul */
  1901. var34.i = ORC_MAX((orc_uint32)var32.i, (orc_uint32)var33.i);
  1902. /* 3: storel */
  1903. ptr0[i] = var34;
  1904. }
  1905. }
  1906. void
  1907. emulate_minsl (OrcOpcodeExecutor *ex, int offset, int n)
  1908. {
  1909. int i;
  1910. orc_union32 * ORC_RESTRICT ptr0;
  1911. const orc_union32 * ORC_RESTRICT ptr4;
  1912. const orc_union32 * ORC_RESTRICT ptr5;
  1913. orc_union32 var32;
  1914. orc_union32 var33;
  1915. orc_union32 var34;
  1916. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1917. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1918. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1919. for (i = 0; i < n; i++) {
  1920. /* 0: loadl */
  1921. var32 = ptr4[i];
  1922. /* 1: loadl */
  1923. var33 = ptr5[i];
  1924. /* 2: minsl */
  1925. var34.i = ORC_MIN(var32.i, var33.i);
  1926. /* 3: storel */
  1927. ptr0[i] = var34;
  1928. }
  1929. }
  1930. void
  1931. emulate_minul (OrcOpcodeExecutor *ex, int offset, int n)
  1932. {
  1933. int i;
  1934. orc_union32 * ORC_RESTRICT ptr0;
  1935. const orc_union32 * ORC_RESTRICT ptr4;
  1936. const orc_union32 * ORC_RESTRICT ptr5;
  1937. orc_union32 var32;
  1938. orc_union32 var33;
  1939. orc_union32 var34;
  1940. ptr0 = (orc_union32 *)ex->dest_ptrs[0];
  1941. ptr4 = (orc_union32 *)ex->src_ptrs[0];
  1942. ptr5 = (orc_union32 *)ex->src_ptrs[1];
  1943. for (i = 0; i < n; i++) {
  1944. /* 0: loadl */
  1945. var32 = ptr4[i];
  1946. /* 1: loadl */
  1947. var33 = ptr5[i];
  1948. /* 2: minul */
  1949. var34.i = ORC_MIN((orc_uint32)var32.i, (orc_uint32)var33.i);
  1950. /* 3: storel */
  1951. ptr0[i] = var34;
  1952. }
  1953. }
  1954. void
  1955. emulate_mulll

Large files files are truncated, but you can click here to view the full file