Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*===---- xopintrin.h - XOP intrinsics -------------------------------------===
  2.  *
  3.  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4.  * See https://llvm.org/LICENSE.txt for license information.
  5.  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6.  *
  7.  *===-----------------------------------------------------------------------===
  8.  */
  9.  
  10. #ifndef __X86INTRIN_H
  11. #error "Never use <xopintrin.h> directly; include <x86intrin.h> instead."
  12. #endif
  13.  
  14. #ifndef __XOPINTRIN_H
  15. #define __XOPINTRIN_H
  16.  
  17. #include <fma4intrin.h>
  18.  
  19. /* Define the default attributes for the functions in this file. */
  20. #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("xop"), __min_vector_width__(128)))
  21. #define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("xop"), __min_vector_width__(256)))
  22.  
  23. static __inline__ __m128i __DEFAULT_FN_ATTRS
  24. _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C)
  25. {
  26.   return (__m128i)__builtin_ia32_vpmacssww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C);
  27. }
  28.  
  29. static __inline__ __m128i __DEFAULT_FN_ATTRS
  30. _mm_macc_epi16(__m128i __A, __m128i __B, __m128i __C)
  31. {
  32.   return (__m128i)__builtin_ia32_vpmacsww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C);
  33. }
  34.  
  35. static __inline__ __m128i __DEFAULT_FN_ATTRS
  36. _mm_maccsd_epi16(__m128i __A, __m128i __B, __m128i __C)
  37. {
  38.   return (__m128i)__builtin_ia32_vpmacsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
  39. }
  40.  
  41. static __inline__ __m128i __DEFAULT_FN_ATTRS
  42. _mm_maccd_epi16(__m128i __A, __m128i __B, __m128i __C)
  43. {
  44.   return (__m128i)__builtin_ia32_vpmacswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
  45. }
  46.  
  47. static __inline__ __m128i __DEFAULT_FN_ATTRS
  48. _mm_maccs_epi32(__m128i __A, __m128i __B, __m128i __C)
  49. {
  50.   return (__m128i)__builtin_ia32_vpmacssdd((__v4si)__A, (__v4si)__B, (__v4si)__C);
  51. }
  52.  
  53. static __inline__ __m128i __DEFAULT_FN_ATTRS
  54. _mm_macc_epi32(__m128i __A, __m128i __B, __m128i __C)
  55. {
  56.   return (__m128i)__builtin_ia32_vpmacsdd((__v4si)__A, (__v4si)__B, (__v4si)__C);
  57. }
  58.  
  59. static __inline__ __m128i __DEFAULT_FN_ATTRS
  60. _mm_maccslo_epi32(__m128i __A, __m128i __B, __m128i __C)
  61. {
  62.   return (__m128i)__builtin_ia32_vpmacssdql((__v4si)__A, (__v4si)__B, (__v2di)__C);
  63. }
  64.  
  65. static __inline__ __m128i __DEFAULT_FN_ATTRS
  66. _mm_macclo_epi32(__m128i __A, __m128i __B, __m128i __C)
  67. {
  68.   return (__m128i)__builtin_ia32_vpmacsdql((__v4si)__A, (__v4si)__B, (__v2di)__C);
  69. }
  70.  
  71. static __inline__ __m128i __DEFAULT_FN_ATTRS
  72. _mm_maccshi_epi32(__m128i __A, __m128i __B, __m128i __C)
  73. {
  74.   return (__m128i)__builtin_ia32_vpmacssdqh((__v4si)__A, (__v4si)__B, (__v2di)__C);
  75. }
  76.  
  77. static __inline__ __m128i __DEFAULT_FN_ATTRS
  78. _mm_macchi_epi32(__m128i __A, __m128i __B, __m128i __C)
  79. {
  80.   return (__m128i)__builtin_ia32_vpmacsdqh((__v4si)__A, (__v4si)__B, (__v2di)__C);
  81. }
  82.  
  83. static __inline__ __m128i __DEFAULT_FN_ATTRS
  84. _mm_maddsd_epi16(__m128i __A, __m128i __B, __m128i __C)
  85. {
  86.   return (__m128i)__builtin_ia32_vpmadcsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
  87. }
  88.  
  89. static __inline__ __m128i __DEFAULT_FN_ATTRS
  90. _mm_maddd_epi16(__m128i __A, __m128i __B, __m128i __C)
  91. {
  92.   return (__m128i)__builtin_ia32_vpmadcswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
  93. }
  94.  
  95. static __inline__ __m128i __DEFAULT_FN_ATTRS
  96. _mm_haddw_epi8(__m128i __A)
  97. {
  98.   return (__m128i)__builtin_ia32_vphaddbw((__v16qi)__A);
  99. }
  100.  
  101. static __inline__ __m128i __DEFAULT_FN_ATTRS
  102. _mm_haddd_epi8(__m128i __A)
  103. {
  104.   return (__m128i)__builtin_ia32_vphaddbd((__v16qi)__A);
  105. }
  106.  
  107. static __inline__ __m128i __DEFAULT_FN_ATTRS
  108. _mm_haddq_epi8(__m128i __A)
  109. {
  110.   return (__m128i)__builtin_ia32_vphaddbq((__v16qi)__A);
  111. }
  112.  
  113. static __inline__ __m128i __DEFAULT_FN_ATTRS
  114. _mm_haddd_epi16(__m128i __A)
  115. {
  116.   return (__m128i)__builtin_ia32_vphaddwd((__v8hi)__A);
  117. }
  118.  
  119. static __inline__ __m128i __DEFAULT_FN_ATTRS
  120. _mm_haddq_epi16(__m128i __A)
  121. {
  122.   return (__m128i)__builtin_ia32_vphaddwq((__v8hi)__A);
  123. }
  124.  
  125. static __inline__ __m128i __DEFAULT_FN_ATTRS
  126. _mm_haddq_epi32(__m128i __A)
  127. {
  128.   return (__m128i)__builtin_ia32_vphadddq((__v4si)__A);
  129. }
  130.  
  131. static __inline__ __m128i __DEFAULT_FN_ATTRS
  132. _mm_haddw_epu8(__m128i __A)
  133. {
  134.   return (__m128i)__builtin_ia32_vphaddubw((__v16qi)__A);
  135. }
  136.  
  137. static __inline__ __m128i __DEFAULT_FN_ATTRS
  138. _mm_haddd_epu8(__m128i __A)
  139. {
  140.   return (__m128i)__builtin_ia32_vphaddubd((__v16qi)__A);
  141. }
  142.  
  143. static __inline__ __m128i __DEFAULT_FN_ATTRS
  144. _mm_haddq_epu8(__m128i __A)
  145. {
  146.   return (__m128i)__builtin_ia32_vphaddubq((__v16qi)__A);
  147. }
  148.  
  149. static __inline__ __m128i __DEFAULT_FN_ATTRS
  150. _mm_haddd_epu16(__m128i __A)
  151. {
  152.   return (__m128i)__builtin_ia32_vphadduwd((__v8hi)__A);
  153. }
  154.  
  155. static __inline__ __m128i __DEFAULT_FN_ATTRS
  156. _mm_haddq_epu16(__m128i __A)
  157. {
  158.   return (__m128i)__builtin_ia32_vphadduwq((__v8hi)__A);
  159. }
  160.  
  161. static __inline__ __m128i __DEFAULT_FN_ATTRS
  162. _mm_haddq_epu32(__m128i __A)
  163. {
  164.   return (__m128i)__builtin_ia32_vphaddudq((__v4si)__A);
  165. }
  166.  
  167. static __inline__ __m128i __DEFAULT_FN_ATTRS
  168. _mm_hsubw_epi8(__m128i __A)
  169. {
  170.   return (__m128i)__builtin_ia32_vphsubbw((__v16qi)__A);
  171. }
  172.  
  173. static __inline__ __m128i __DEFAULT_FN_ATTRS
  174. _mm_hsubd_epi16(__m128i __A)
  175. {
  176.   return (__m128i)__builtin_ia32_vphsubwd((__v8hi)__A);
  177. }
  178.  
  179. static __inline__ __m128i __DEFAULT_FN_ATTRS
  180. _mm_hsubq_epi32(__m128i __A)
  181. {
  182.   return (__m128i)__builtin_ia32_vphsubdq((__v4si)__A);
  183. }
  184.  
  185. static __inline__ __m128i __DEFAULT_FN_ATTRS
  186. _mm_cmov_si128(__m128i __A, __m128i __B, __m128i __C)
  187. {
  188.   return (__m128i)(((__v2du)__A & (__v2du)__C) | ((__v2du)__B & ~(__v2du)__C));
  189. }
  190.  
  191. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  192. _mm256_cmov_si256(__m256i __A, __m256i __B, __m256i __C)
  193. {
  194.   return (__m256i)(((__v4du)__A & (__v4du)__C) | ((__v4du)__B & ~(__v4du)__C));
  195. }
  196.  
  197. static __inline__ __m128i __DEFAULT_FN_ATTRS
  198. _mm_perm_epi8(__m128i __A, __m128i __B, __m128i __C)
  199. {
  200.   return (__m128i)__builtin_ia32_vpperm((__v16qi)__A, (__v16qi)__B, (__v16qi)__C);
  201. }
  202.  
  203. static __inline__ __m128i __DEFAULT_FN_ATTRS
  204. _mm_rot_epi8(__m128i __A, __m128i __B)
  205. {
  206.   return (__m128i)__builtin_ia32_vprotb((__v16qi)__A, (__v16qi)__B);
  207. }
  208.  
  209. static __inline__ __m128i __DEFAULT_FN_ATTRS
  210. _mm_rot_epi16(__m128i __A, __m128i __B)
  211. {
  212.   return (__m128i)__builtin_ia32_vprotw((__v8hi)__A, (__v8hi)__B);
  213. }
  214.  
  215. static __inline__ __m128i __DEFAULT_FN_ATTRS
  216. _mm_rot_epi32(__m128i __A, __m128i __B)
  217. {
  218.   return (__m128i)__builtin_ia32_vprotd((__v4si)__A, (__v4si)__B);
  219. }
  220.  
  221. static __inline__ __m128i __DEFAULT_FN_ATTRS
  222. _mm_rot_epi64(__m128i __A, __m128i __B)
  223. {
  224.   return (__m128i)__builtin_ia32_vprotq((__v2di)__A, (__v2di)__B);
  225. }
  226.  
  227. #define _mm_roti_epi8(A, N) \
  228.   ((__m128i)__builtin_ia32_vprotbi((__v16qi)(__m128i)(A), (N)))
  229.  
  230. #define _mm_roti_epi16(A, N) \
  231.   ((__m128i)__builtin_ia32_vprotwi((__v8hi)(__m128i)(A), (N)))
  232.  
  233. #define _mm_roti_epi32(A, N) \
  234.   ((__m128i)__builtin_ia32_vprotdi((__v4si)(__m128i)(A), (N)))
  235.  
  236. #define _mm_roti_epi64(A, N) \
  237.   ((__m128i)__builtin_ia32_vprotqi((__v2di)(__m128i)(A), (N)))
  238.  
  239. static __inline__ __m128i __DEFAULT_FN_ATTRS
  240. _mm_shl_epi8(__m128i __A, __m128i __B)
  241. {
  242.   return (__m128i)__builtin_ia32_vpshlb((__v16qi)__A, (__v16qi)__B);
  243. }
  244.  
  245. static __inline__ __m128i __DEFAULT_FN_ATTRS
  246. _mm_shl_epi16(__m128i __A, __m128i __B)
  247. {
  248.   return (__m128i)__builtin_ia32_vpshlw((__v8hi)__A, (__v8hi)__B);
  249. }
  250.  
  251. static __inline__ __m128i __DEFAULT_FN_ATTRS
  252. _mm_shl_epi32(__m128i __A, __m128i __B)
  253. {
  254.   return (__m128i)__builtin_ia32_vpshld((__v4si)__A, (__v4si)__B);
  255. }
  256.  
  257. static __inline__ __m128i __DEFAULT_FN_ATTRS
  258. _mm_shl_epi64(__m128i __A, __m128i __B)
  259. {
  260.   return (__m128i)__builtin_ia32_vpshlq((__v2di)__A, (__v2di)__B);
  261. }
  262.  
  263. static __inline__ __m128i __DEFAULT_FN_ATTRS
  264. _mm_sha_epi8(__m128i __A, __m128i __B)
  265. {
  266.   return (__m128i)__builtin_ia32_vpshab((__v16qi)__A, (__v16qi)__B);
  267. }
  268.  
  269. static __inline__ __m128i __DEFAULT_FN_ATTRS
  270. _mm_sha_epi16(__m128i __A, __m128i __B)
  271. {
  272.   return (__m128i)__builtin_ia32_vpshaw((__v8hi)__A, (__v8hi)__B);
  273. }
  274.  
  275. static __inline__ __m128i __DEFAULT_FN_ATTRS
  276. _mm_sha_epi32(__m128i __A, __m128i __B)
  277. {
  278.   return (__m128i)__builtin_ia32_vpshad((__v4si)__A, (__v4si)__B);
  279. }
  280.  
  281. static __inline__ __m128i __DEFAULT_FN_ATTRS
  282. _mm_sha_epi64(__m128i __A, __m128i __B)
  283. {
  284.   return (__m128i)__builtin_ia32_vpshaq((__v2di)__A, (__v2di)__B);
  285. }
  286.  
  287. #define _mm_com_epu8(A, B, N) \
  288.   ((__m128i)__builtin_ia32_vpcomub((__v16qi)(__m128i)(A), \
  289.                                    (__v16qi)(__m128i)(B), (N)))
  290.  
  291. #define _mm_com_epu16(A, B, N) \
  292.   ((__m128i)__builtin_ia32_vpcomuw((__v8hi)(__m128i)(A), \
  293.                                    (__v8hi)(__m128i)(B), (N)))
  294.  
  295. #define _mm_com_epu32(A, B, N) \
  296.   ((__m128i)__builtin_ia32_vpcomud((__v4si)(__m128i)(A), \
  297.                                    (__v4si)(__m128i)(B), (N)))
  298.  
  299. #define _mm_com_epu64(A, B, N) \
  300.   ((__m128i)__builtin_ia32_vpcomuq((__v2di)(__m128i)(A), \
  301.                                    (__v2di)(__m128i)(B), (N)))
  302.  
  303. #define _mm_com_epi8(A, B, N) \
  304.   ((__m128i)__builtin_ia32_vpcomb((__v16qi)(__m128i)(A), \
  305.                                   (__v16qi)(__m128i)(B), (N)))
  306.  
  307. #define _mm_com_epi16(A, B, N) \
  308.   ((__m128i)__builtin_ia32_vpcomw((__v8hi)(__m128i)(A), \
  309.                                   (__v8hi)(__m128i)(B), (N)))
  310.  
  311. #define _mm_com_epi32(A, B, N) \
  312.   ((__m128i)__builtin_ia32_vpcomd((__v4si)(__m128i)(A), \
  313.                                   (__v4si)(__m128i)(B), (N)))
  314.  
  315. #define _mm_com_epi64(A, B, N) \
  316.   ((__m128i)__builtin_ia32_vpcomq((__v2di)(__m128i)(A), \
  317.                                   (__v2di)(__m128i)(B), (N)))
  318.  
  319. #define _MM_PCOMCTRL_LT    0
  320. #define _MM_PCOMCTRL_LE    1
  321. #define _MM_PCOMCTRL_GT    2
  322. #define _MM_PCOMCTRL_GE    3
  323. #define _MM_PCOMCTRL_EQ    4
  324. #define _MM_PCOMCTRL_NEQ   5
  325. #define _MM_PCOMCTRL_FALSE 6
  326. #define _MM_PCOMCTRL_TRUE  7
  327.  
  328. static __inline__ __m128i __DEFAULT_FN_ATTRS
  329. _mm_comlt_epu8(__m128i __A, __m128i __B)
  330. {
  331.   return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LT);
  332. }
  333.  
  334. static __inline__ __m128i __DEFAULT_FN_ATTRS
  335. _mm_comle_epu8(__m128i __A, __m128i __B)
  336. {
  337.   return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LE);
  338. }
  339.  
  340. static __inline__ __m128i __DEFAULT_FN_ATTRS
  341. _mm_comgt_epu8(__m128i __A, __m128i __B)
  342. {
  343.   return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GT);
  344. }
  345.  
  346. static __inline__ __m128i __DEFAULT_FN_ATTRS
  347. _mm_comge_epu8(__m128i __A, __m128i __B)
  348. {
  349.   return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GE);
  350. }
  351.  
  352. static __inline__ __m128i __DEFAULT_FN_ATTRS
  353. _mm_comeq_epu8(__m128i __A, __m128i __B)
  354. {
  355.   return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_EQ);
  356. }
  357.  
  358. static __inline__ __m128i __DEFAULT_FN_ATTRS
  359. _mm_comneq_epu8(__m128i __A, __m128i __B)
  360. {
  361.   return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_NEQ);
  362. }
  363.  
  364. static __inline__ __m128i __DEFAULT_FN_ATTRS
  365. _mm_comfalse_epu8(__m128i __A, __m128i __B)
  366. {
  367.   return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_FALSE);
  368. }
  369.  
  370. static __inline__ __m128i __DEFAULT_FN_ATTRS
  371. _mm_comtrue_epu8(__m128i __A, __m128i __B)
  372. {
  373.   return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_TRUE);
  374. }
  375.  
  376. static __inline__ __m128i __DEFAULT_FN_ATTRS
  377. _mm_comlt_epu16(__m128i __A, __m128i __B)
  378. {
  379.   return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LT);
  380. }
  381.  
  382. static __inline__ __m128i __DEFAULT_FN_ATTRS
  383. _mm_comle_epu16(__m128i __A, __m128i __B)
  384. {
  385.   return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LE);
  386. }
  387.  
  388. static __inline__ __m128i __DEFAULT_FN_ATTRS
  389. _mm_comgt_epu16(__m128i __A, __m128i __B)
  390. {
  391.   return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GT);
  392. }
  393.  
  394. static __inline__ __m128i __DEFAULT_FN_ATTRS
  395. _mm_comge_epu16(__m128i __A, __m128i __B)
  396. {
  397.   return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GE);
  398. }
  399.  
  400. static __inline__ __m128i __DEFAULT_FN_ATTRS
  401. _mm_comeq_epu16(__m128i __A, __m128i __B)
  402. {
  403.   return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_EQ);
  404. }
  405.  
  406. static __inline__ __m128i __DEFAULT_FN_ATTRS
  407. _mm_comneq_epu16(__m128i __A, __m128i __B)
  408. {
  409.   return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_NEQ);
  410. }
  411.  
  412. static __inline__ __m128i __DEFAULT_FN_ATTRS
  413. _mm_comfalse_epu16(__m128i __A, __m128i __B)
  414. {
  415.   return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_FALSE);
  416. }
  417.  
  418. static __inline__ __m128i __DEFAULT_FN_ATTRS
  419. _mm_comtrue_epu16(__m128i __A, __m128i __B)
  420. {
  421.   return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_TRUE);
  422. }
  423.  
  424. static __inline__ __m128i __DEFAULT_FN_ATTRS
  425. _mm_comlt_epu32(__m128i __A, __m128i __B)
  426. {
  427.   return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LT);
  428. }
  429.  
  430. static __inline__ __m128i __DEFAULT_FN_ATTRS
  431. _mm_comle_epu32(__m128i __A, __m128i __B)
  432. {
  433.   return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LE);
  434. }
  435.  
  436. static __inline__ __m128i __DEFAULT_FN_ATTRS
  437. _mm_comgt_epu32(__m128i __A, __m128i __B)
  438. {
  439.   return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GT);
  440. }
  441.  
  442. static __inline__ __m128i __DEFAULT_FN_ATTRS
  443. _mm_comge_epu32(__m128i __A, __m128i __B)
  444. {
  445.   return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GE);
  446. }
  447.  
  448. static __inline__ __m128i __DEFAULT_FN_ATTRS
  449. _mm_comeq_epu32(__m128i __A, __m128i __B)
  450. {
  451.   return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_EQ);
  452. }
  453.  
  454. static __inline__ __m128i __DEFAULT_FN_ATTRS
  455. _mm_comneq_epu32(__m128i __A, __m128i __B)
  456. {
  457.   return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_NEQ);
  458. }
  459.  
  460. static __inline__ __m128i __DEFAULT_FN_ATTRS
  461. _mm_comfalse_epu32(__m128i __A, __m128i __B)
  462. {
  463.   return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_FALSE);
  464. }
  465.  
  466. static __inline__ __m128i __DEFAULT_FN_ATTRS
  467. _mm_comtrue_epu32(__m128i __A, __m128i __B)
  468. {
  469.   return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_TRUE);
  470. }
  471.  
  472. static __inline__ __m128i __DEFAULT_FN_ATTRS
  473. _mm_comlt_epu64(__m128i __A, __m128i __B)
  474. {
  475.   return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LT);
  476. }
  477.  
  478. static __inline__ __m128i __DEFAULT_FN_ATTRS
  479. _mm_comle_epu64(__m128i __A, __m128i __B)
  480. {
  481.   return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LE);
  482. }
  483.  
  484. static __inline__ __m128i __DEFAULT_FN_ATTRS
  485. _mm_comgt_epu64(__m128i __A, __m128i __B)
  486. {
  487.   return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GT);
  488. }
  489.  
  490. static __inline__ __m128i __DEFAULT_FN_ATTRS
  491. _mm_comge_epu64(__m128i __A, __m128i __B)
  492. {
  493.   return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GE);
  494. }
  495.  
  496. static __inline__ __m128i __DEFAULT_FN_ATTRS
  497. _mm_comeq_epu64(__m128i __A, __m128i __B)
  498. {
  499.   return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_EQ);
  500. }
  501.  
  502. static __inline__ __m128i __DEFAULT_FN_ATTRS
  503. _mm_comneq_epu64(__m128i __A, __m128i __B)
  504. {
  505.   return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_NEQ);
  506. }
  507.  
  508. static __inline__ __m128i __DEFAULT_FN_ATTRS
  509. _mm_comfalse_epu64(__m128i __A, __m128i __B)
  510. {
  511.   return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_FALSE);
  512. }
  513.  
  514. static __inline__ __m128i __DEFAULT_FN_ATTRS
  515. _mm_comtrue_epu64(__m128i __A, __m128i __B)
  516. {
  517.   return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_TRUE);
  518. }
  519.  
  520. static __inline__ __m128i __DEFAULT_FN_ATTRS
  521. _mm_comlt_epi8(__m128i __A, __m128i __B)
  522. {
  523.   return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LT);
  524. }
  525.  
  526. static __inline__ __m128i __DEFAULT_FN_ATTRS
  527. _mm_comle_epi8(__m128i __A, __m128i __B)
  528. {
  529.   return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LE);
  530. }
  531.  
  532. static __inline__ __m128i __DEFAULT_FN_ATTRS
  533. _mm_comgt_epi8(__m128i __A, __m128i __B)
  534. {
  535.   return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GT);
  536. }
  537.  
  538. static __inline__ __m128i __DEFAULT_FN_ATTRS
  539. _mm_comge_epi8(__m128i __A, __m128i __B)
  540. {
  541.   return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GE);
  542. }
  543.  
  544. static __inline__ __m128i __DEFAULT_FN_ATTRS
  545. _mm_comeq_epi8(__m128i __A, __m128i __B)
  546. {
  547.   return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_EQ);
  548. }
  549.  
  550. static __inline__ __m128i __DEFAULT_FN_ATTRS
  551. _mm_comneq_epi8(__m128i __A, __m128i __B)
  552. {
  553.   return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_NEQ);
  554. }
  555.  
  556. static __inline__ __m128i __DEFAULT_FN_ATTRS
  557. _mm_comfalse_epi8(__m128i __A, __m128i __B)
  558. {
  559.   return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_FALSE);
  560. }
  561.  
  562. static __inline__ __m128i __DEFAULT_FN_ATTRS
  563. _mm_comtrue_epi8(__m128i __A, __m128i __B)
  564. {
  565.   return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_TRUE);
  566. }
  567.  
  568. static __inline__ __m128i __DEFAULT_FN_ATTRS
  569. _mm_comlt_epi16(__m128i __A, __m128i __B)
  570. {
  571.   return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LT);
  572. }
  573.  
  574. static __inline__ __m128i __DEFAULT_FN_ATTRS
  575. _mm_comle_epi16(__m128i __A, __m128i __B)
  576. {
  577.   return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LE);
  578. }
  579.  
  580. static __inline__ __m128i __DEFAULT_FN_ATTRS
  581. _mm_comgt_epi16(__m128i __A, __m128i __B)
  582. {
  583.   return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GT);
  584. }
  585.  
  586. static __inline__ __m128i __DEFAULT_FN_ATTRS
  587. _mm_comge_epi16(__m128i __A, __m128i __B)
  588. {
  589.   return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GE);
  590. }
  591.  
  592. static __inline__ __m128i __DEFAULT_FN_ATTRS
  593. _mm_comeq_epi16(__m128i __A, __m128i __B)
  594. {
  595.   return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_EQ);
  596. }
  597.  
  598. static __inline__ __m128i __DEFAULT_FN_ATTRS
  599. _mm_comneq_epi16(__m128i __A, __m128i __B)
  600. {
  601.   return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_NEQ);
  602. }
  603.  
  604. static __inline__ __m128i __DEFAULT_FN_ATTRS
  605. _mm_comfalse_epi16(__m128i __A, __m128i __B)
  606. {
  607.   return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_FALSE);
  608. }
  609.  
  610. static __inline__ __m128i __DEFAULT_FN_ATTRS
  611. _mm_comtrue_epi16(__m128i __A, __m128i __B)
  612. {
  613.   return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_TRUE);
  614. }
  615.  
  616. static __inline__ __m128i __DEFAULT_FN_ATTRS
  617. _mm_comlt_epi32(__m128i __A, __m128i __B)
  618. {
  619.   return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LT);
  620. }
  621.  
  622. static __inline__ __m128i __DEFAULT_FN_ATTRS
  623. _mm_comle_epi32(__m128i __A, __m128i __B)
  624. {
  625.   return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LE);
  626. }
  627.  
  628. static __inline__ __m128i __DEFAULT_FN_ATTRS
  629. _mm_comgt_epi32(__m128i __A, __m128i __B)
  630. {
  631.   return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GT);
  632. }
  633.  
  634. static __inline__ __m128i __DEFAULT_FN_ATTRS
  635. _mm_comge_epi32(__m128i __A, __m128i __B)
  636. {
  637.   return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GE);
  638. }
  639.  
  640. static __inline__ __m128i __DEFAULT_FN_ATTRS
  641. _mm_comeq_epi32(__m128i __A, __m128i __B)
  642. {
  643.   return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_EQ);
  644. }
  645.  
  646. static __inline__ __m128i __DEFAULT_FN_ATTRS
  647. _mm_comneq_epi32(__m128i __A, __m128i __B)
  648. {
  649.   return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_NEQ);
  650. }
  651.  
  652. static __inline__ __m128i __DEFAULT_FN_ATTRS
  653. _mm_comfalse_epi32(__m128i __A, __m128i __B)
  654. {
  655.   return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_FALSE);
  656. }
  657.  
  658. static __inline__ __m128i __DEFAULT_FN_ATTRS
  659. _mm_comtrue_epi32(__m128i __A, __m128i __B)
  660. {
  661.   return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_TRUE);
  662. }
  663.  
  664. static __inline__ __m128i __DEFAULT_FN_ATTRS
  665. _mm_comlt_epi64(__m128i __A, __m128i __B)
  666. {
  667.   return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LT);
  668. }
  669.  
  670. static __inline__ __m128i __DEFAULT_FN_ATTRS
  671. _mm_comle_epi64(__m128i __A, __m128i __B)
  672. {
  673.   return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LE);
  674. }
  675.  
  676. static __inline__ __m128i __DEFAULT_FN_ATTRS
  677. _mm_comgt_epi64(__m128i __A, __m128i __B)
  678. {
  679.   return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GT);
  680. }
  681.  
  682. static __inline__ __m128i __DEFAULT_FN_ATTRS
  683. _mm_comge_epi64(__m128i __A, __m128i __B)
  684. {
  685.   return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GE);
  686. }
  687.  
  688. static __inline__ __m128i __DEFAULT_FN_ATTRS
  689. _mm_comeq_epi64(__m128i __A, __m128i __B)
  690. {
  691.   return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_EQ);
  692. }
  693.  
  694. static __inline__ __m128i __DEFAULT_FN_ATTRS
  695. _mm_comneq_epi64(__m128i __A, __m128i __B)
  696. {
  697.   return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_NEQ);
  698. }
  699.  
  700. static __inline__ __m128i __DEFAULT_FN_ATTRS
  701. _mm_comfalse_epi64(__m128i __A, __m128i __B)
  702. {
  703.   return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_FALSE);
  704. }
  705.  
  706. static __inline__ __m128i __DEFAULT_FN_ATTRS
  707. _mm_comtrue_epi64(__m128i __A, __m128i __B)
  708. {
  709.   return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_TRUE);
  710. }
  711.  
  712. #define _mm_permute2_pd(X, Y, C, I) \
  713.   ((__m128d)__builtin_ia32_vpermil2pd((__v2df)(__m128d)(X), \
  714.                                       (__v2df)(__m128d)(Y), \
  715.                                       (__v2di)(__m128i)(C), (I)))
  716.  
  717. #define _mm256_permute2_pd(X, Y, C, I) \
  718.   ((__m256d)__builtin_ia32_vpermil2pd256((__v4df)(__m256d)(X), \
  719.                                          (__v4df)(__m256d)(Y), \
  720.                                          (__v4di)(__m256i)(C), (I)))
  721.  
  722. #define _mm_permute2_ps(X, Y, C, I) \
  723.   ((__m128)__builtin_ia32_vpermil2ps((__v4sf)(__m128)(X), (__v4sf)(__m128)(Y), \
  724.                                      (__v4si)(__m128i)(C), (I)))
  725.  
  726. #define _mm256_permute2_ps(X, Y, C, I) \
  727.   ((__m256)__builtin_ia32_vpermil2ps256((__v8sf)(__m256)(X), \
  728.                                         (__v8sf)(__m256)(Y), \
  729.                                         (__v8si)(__m256i)(C), (I)))
  730.  
  731. static __inline__ __m128 __DEFAULT_FN_ATTRS
  732. _mm_frcz_ss(__m128 __A)
  733. {
  734.   return (__m128)__builtin_ia32_vfrczss((__v4sf)__A);
  735. }
  736.  
  737. static __inline__ __m128d __DEFAULT_FN_ATTRS
  738. _mm_frcz_sd(__m128d __A)
  739. {
  740.   return (__m128d)__builtin_ia32_vfrczsd((__v2df)__A);
  741. }
  742.  
  743. static __inline__ __m128 __DEFAULT_FN_ATTRS
  744. _mm_frcz_ps(__m128 __A)
  745. {
  746.   return (__m128)__builtin_ia32_vfrczps((__v4sf)__A);
  747. }
  748.  
  749. static __inline__ __m128d __DEFAULT_FN_ATTRS
  750. _mm_frcz_pd(__m128d __A)
  751. {
  752.   return (__m128d)__builtin_ia32_vfrczpd((__v2df)__A);
  753. }
  754.  
  755. static __inline__ __m256 __DEFAULT_FN_ATTRS256
  756. _mm256_frcz_ps(__m256 __A)
  757. {
  758.   return (__m256)__builtin_ia32_vfrczps256((__v8sf)__A);
  759. }
  760.  
  761. static __inline__ __m256d __DEFAULT_FN_ATTRS256
  762. _mm256_frcz_pd(__m256d __A)
  763. {
  764.   return (__m256d)__builtin_ia32_vfrczpd256((__v4df)__A);
  765. }
  766.  
  767. #undef __DEFAULT_FN_ATTRS
  768. #undef __DEFAULT_FN_ATTRS256
  769.  
  770. #endif /* __XOPINTRIN_H */
  771.