AVX/AVX2/AVX512 アドベントカレンダー2021まとめ

# まとめ
AVX/AVX2命令の解説記事をたくさん書いていきました．
@tanakmura さんのおかげで，1日だけお休みできました．（その時出張してたので大変助かりました）

AVX/AVX2命令はたくさんあり，下の関数だけあります．
これに加えて，popcountなど，専用の組み込み関数などもあります．
全部解説するには，日数が足りなかったかもしれませんが，主要な項目はだいたい説明しきれたかなと思います．

目次のページに，まとめた記事のリンクを書いています．
[AVX/AVX2/AVX512 アドベントカレンダー2021イントロダクション](https://qiita.com/fukushima1981/items/66bc7265f3b678903dba)
だいぶ書いたかなと思っていましたが意外とまだまだ空欄が．．．
卒論・修論が終わるころからもう一回書き直すので完成版のリリースは来年のどこかで出来ればいいなと思ってます．

* コードのサンプル増やしたり
* 表記のゆれを直したり
* 図をもうちょっときれいに書いたりとか

今のCPUアーキテクチャはSIMD計算を使わないとまったくそのパフォーマンスを生かし切れていません．
残念ながら自動ベクトル化もそんなにまだまだ賢くなく全然ベクトル化してくれないです．
加えて，AMDとIntelのCPUで癖が違ったりするのでアーキテクチャによって発行する命令を変えないといけないのとかの知見がこれらの記事で解決すると幸いです．
個人的には，最新のIntel Alderlakeでどうパフォーマンスが良くなったのかを，これを書いているときに情報として追記していってました．


それでは良いお年を！

## データ入手先
* [Intel® Intrinsics Guide](https://software.intel.com/sites/landingpage/IntrinsicsGuide/)
	* [Intel® Intrinsics Guide（ミラー）](https://www.laruence.com/sse/)
    * たまにIntel® Intrinsics Guideのサイトは落ちています
* [uops](https://uops.info/)
	* スループット，レイテンシ，uopsを全アーキテクチャで解析
* [Agner: Software optimization resources](https://www.agner.org/optimize/)
    * 各CPUの詳細な情報はほぼすべてこのページに
* [instlatx64](http://instlatx64.atw.hu/)
	* FinalWire LtdAIDA64 Benchmark Moduleのベンチマーク集

## 公式ドキュメント
* [Intel® 64 and IA-32 Architectures Optimization Reference Manual](https://software.intel.com/content/www/us/en/develop/download/intel-64-and-ia-32-architectures-optimization-reference-manual.html)
	* [古い日本語訳](https://www.isus.jp/wp-content/uploads/pdf/64-ia-32-architectures-optimization-manual-September2019-042bJA.pdf)
* [インテルコンパイラ14ユーザーリファレンスガイド：組み込み関数](https://www.xlsoft.com/jp/products/intel/compilers/manual/14/cpp/index.htm)
* [AMD Developer Guides, Manuals & ISA Documents](https://developer.amd.com/resources/developer-guides-manuals/)

## その他リンク
* [Crunching Numbers with AVX and AVX2](https://www.codeproject.com/Articles/874396/
Crunching-Numbers-with-AVX-and-AVX)
* [x86/x64 SIMD命令一覧表](https://www.officedaytime.com/tips/simd.html)
    * 各命令を詳細に図解したもの
    * 詳しくなってこればこのドキュメントだけで十分
* [x86 and amd64 instruction reference](https://www.felixcloutier.com/x86/index.html)
    * アセンブリの対応表
* [x86 Intrinsics Cheat Sheet (pdf)](https://db.in.tum.de/~finis/x86-intrin-cheatsheet-v2.2.pdf?lang=en)
* [Intel Intrinsics SIMDのシャッフル系操作まとめ](https://qiita.com/stanaka2/items/a88d257661a22e15b8f0)
* [命令単体の性能を計測する](http://nano.flop.jp/txt/instruction/index.html)
	* こちらのコードでも計測可能です．
* [ネットワーク系演習](https://fukushimalab.github.io/hpc_exercise/)


# 追伸
LTMGの数をカウントすると，空いている時間にかいたOpenCVのアドベントカレンダーのわりとニッチな記事2つの合計よりもはるかに少なく，AVXへの注目ってやっぱりこれくらいだよなぁと思っている所です．これ，たとえ完成させて書いても売れるのか？？

* [100行で作る定数時間バイラテラルフィルタ](https://qiita.com/fukushima1981/items/296e3a20aed78df00ff1)
* [OpenCVによる特異値分解と最小二乗法](https://qiita.com/fukushima1981/items/643aa4ced546dca1fe2a)



# AVX/AVX2全命令

```cpp
vpabsw __m256i _mm256_abs_epi16 (__m256i a) 
vpabsd __m256i _mm256_abs_epi32 (__m256i a) 
vpabsb __m256i _mm256_abs_epi8 (__m256i a) 
vpaddw __m256i _mm256_add_epi16 (__m256i a, __m256i b) 
vpaddd __m256i _mm256_add_epi32 (__m256i a, __m256i b) 
vpaddq __m256i _mm256_add_epi64 (__m256i a, __m256i b) 
vpaddb __m256i _mm256_add_epi8 (__m256i a, __m256i b) 
vaddpd __m256d _mm256_add_pd (__m256d a, __m256d b) 
vaddps __m256 _mm256_add_ps (__m256 a, __m256 b) 
vpaddsw __m256i _mm256_adds_epi16 (__m256i a, __m256i b) 
vpaddsb __m256i _mm256_adds_epi8 (__m256i a, __m256i b) 
vpaddusw __m256i _mm256_adds_epu16 (__m256i a, __m256i b) 
vpaddusb __m256i _mm256_adds_epu8 (__m256i a, __m256i b) 
vaddsubpd __m256d _mm256_addsub_pd (__m256d a, __m256d b) 
vaddsubps __m256 _mm256_addsub_ps (__m256 a, __m256 b) 
vpalignr __m256i _mm256_alignr_epi8 (__m256i a, __m256i b, const int imm8) 
vandpd __m256d _mm256_and_pd (__m256d a, __m256d b) 
vandps __m256 _mm256_and_ps (__m256 a, __m256 b) 
vpand __m256i _mm256_and_si256 (__m256i a, __m256i b) 
vandnpd __m256d _mm256_andnot_pd (__m256d a, __m256d b) 
vandnps __m256 _mm256_andnot_ps (__m256 a, __m256 b) 
vpandn __m256i _mm256_andnot_si256 (__m256i a, __m256i b) 
vpavgw __m256i _mm256_avg_epu16 (__m256i a, __m256i b) 
vpavgb __m256i _mm256_avg_epu8 (__m256i a, __m256i b) 
vpblendw __m256i _mm256_blend_epi16 (__m256i a, __m256i b, const int imm8) 
vpblendd __m128i _mm_blend_epi32 (__m128i a, __m128i b, const int imm8) 
vpblendd __m256i _mm256_blend_epi32 (__m256i a, __m256i b, const int imm8) 
vblendpd __m256d _mm256_blend_pd (__m256d a, __m256d b, const int imm8) 
vblendps __m256 _mm256_blend_ps (__m256 a, __m256 b, const int imm8) 
vpblendvb __m256i _mm256_blendv_epi8 (__m256i a, __m256i b, __m256i mask) 
vblendvpd __m256d _mm256_blendv_pd (__m256d a, __m256d b, __m256d mask) 
vblendvps __m256 _mm256_blendv_ps (__m256 a, __m256 b, __m256 mask) 
vbroadcastf128 __m256d _mm256_broadcast_pd (__m128d const * mem_addr) 
vbroadcastf128 __m256 _mm256_broadcast_ps (__m128 const * mem_addr) 
vbroadcastsd __m256d _mm256_broadcast_sd (double const * mem_addr) 
vbroadcastss __m128 _mm_broadcast_ss (float const * mem_addr) 
vbroadcastss __m256 _mm256_broadcast_ss (float const * mem_addr) 
vpbroadcastb __m128i _mm_broadcastb_epi8 (__m128i a) 
vpbroadcastb __m256i _mm256_broadcastb_epi8 (__m128i a) 
vpbroadcastd __m128i _mm_broadcastd_epi32 (__m128i a) 
vpbroadcastd __m256i _mm256_broadcastd_epi32 (__m128i a) 
vpbroadcastq __m128i _mm_broadcastq_epi64 (__m128i a) 
vpbroadcastq __m256i _mm256_broadcastq_epi64 (__m128i a) 
movddup __m128d _mm_broadcastsd_pd (__m128d a) 
vbroadcastsd __m256d _mm256_broadcastsd_pd (__m128d a) 
vbroadcasti128 __m256i _mm_broadcastsi128_si256 (__m128i a) 
vbroadcasti128 __m256i _mm256_broadcastsi128_si256 (__m128i a) 
vbroadcastss __m128 _mm_broadcastss_ps (__m128 a) 
vbroadcastss __m256 _mm256_broadcastss_ps (__m128 a) 
vpbroadcastw __m128i _mm_broadcastw_epi16 (__m128i a) 
vpbroadcastw __m256i _mm256_broadcastw_epi16 (__m128i a) 
vpslldq __m256i _mm256_bslli_epi128 (__m256i a, const int imm8) 
vpsrldq __m256i _mm256_bsrli_epi128 (__m256i a, const int imm8) 
NA __m256 _mm256_castpd_ps (__m256d a)
NA __m256i _mm256_castpd_si256 (__m256d a)
NA __m256d _mm256_castpd128_pd256 (__m128d a)
NA __m128d _mm256_castpd256_pd128 (__m256d a)
NA __m256d _mm256_castps_pd (__m256 a)
NA __m256i _mm256_castps_si256 (__m256 a)
NA __m256 _mm256_castps128_ps256 (__m128 a)
NA __m128 _mm256_castps256_ps128 (__m256 a)
NA __m256i _mm256_castsi128_si256 (__m128i a)
NA __m256d _mm256_castsi256_pd (__m256i a)
NA __m256 _mm256_castsi256_ps (__m256i a)
NA __m128i _mm256_castsi256_si128 (__m256i a)
vroundpd __m256d _mm256_ceil_pd (__m256d a)
vroundps __m256 _mm256_ceil_ps (__m256 a)
vcmppd __m128d _mm_cmp_pd (__m128d a, __m128d b, const int imm8)
vcmppd __m256d _mm256_cmp_pd (__m256d a, __m256d b, const int imm8)
vcmpps __m128 _mm_cmp_ps (__m128 a, __m128 b, const int imm8)
vcmpps __m256 _mm256_cmp_ps (__m256 a, __m256 b, const int imm8)
vcmpsd __m128d _mm_cmp_sd (__m128d a, __m128d b, const int imm8)
vcmpss __m128 _mm_cmp_ss (__m128 a, __m128 b, const int imm8)
vpcmpeqw __m256i _mm256_cmpeq_epi16 (__m256i a, __m256i b)
vpcmpeqd __m256i _mm256_cmpeq_epi32 (__m256i a, __m256i b)
vpcmpeqq __m256i _mm256_cmpeq_epi64 (__m256i a, __m256i b)
vpcmpeqb __m256i _mm256_cmpeq_epi8 (__m256i a, __m256i b)
vpcmpgtw __m256i _mm256_cmpgt_epi16 (__m256i a, __m256i b)
vpcmpgtd __m256i _mm256_cmpgt_epi32 (__m256i a, __m256i b)
vpcmpgtq __m256i _mm256_cmpgt_epi64 (__m256i a, __m256i b)
vpcmpgtb __m256i _mm256_cmpgt_epi8 (__m256i a, __m256i b)
vpmovsxwd __m256i _mm256_cvtepi16_epi32 (__m128i a)
vpmovsxwq __m256i _mm256_cvtepi16_epi64 (__m128i a)
vpmovsxdq __m256i _mm256_cvtepi32_epi64 (__m128i a)
vcvtdq2pd __m256d _mm256_cvtepi32_pd (__m128i a)
vcvtdq2ps __m256 _mm256_cvtepi32_ps (__m256i a)
vpmovsxbw __m256i _mm256_cvtepi8_epi16 (__m128i a)
vpmovsxbd __m256i _mm256_cvtepi8_epi32 (__m128i a)
vpmovsxbq __m256i _mm256_cvtepi8_epi64 (__m128i a)
vpmovzxwd __m256i _mm256_cvtepu16_epi32 (__m128i a)
vpmovzxwq __m256i _mm256_cvtepu16_epi64 (__m128i a)
vpmovzxdq __m256i _mm256_cvtepu32_epi64 (__m128i a)
vpmovzxbw __m256i _mm256_cvtepu8_epi16 (__m128i a)
vpmovzxbd __m256i _mm256_cvtepu8_epi32 (__m128i a)
vpmovzxbq __m256i _mm256_cvtepu8_epi64 (__m128i a)
vcvtpd2dq __m128i _mm256_cvtpd_epi32 (__m256d a)
vcvtpd2ps __m128 _mm256_cvtpd_ps (__m256d a)
vcvtps2dq __m256i _mm256_cvtps_epi32 (__m256 a)
vcvtps2pd __m256d _mm256_cvtps_pd (__m128 a)
vmovsd double _mm256_cvtsd_f64 (__m256d a)
vmovd int _mm256_cvtsi256_si32 (__m256i a)
vmovss float _mm256_cvtss_f32 (__m256 a)
vcvttpd2dq __m128i _mm256_cvttpd_epi32 (__m256d a)
vcvttps2dq __m256i _mm256_cvttps_epi32 (__m256 a)
vdivpd __m256d _mm256_div_pd (__m256d a, __m256d b)
vdivps __m256 _mm256_div_ps (__m256 a, __m256 b)
vdpps __m256 _mm256_dp_ps (__m256 a, __m256 b, const int imm8)
... int _mm256_extract_epi16 (__m256i a, const int index)
... __int32 _mm256_extract_epi32 (__m256i a, const int index)
... __int64 _mm256_extract_epi64 (__m256i a, const int index)
... int _mm256_extract_epi8 (__m256i a, const int index)
vextractf128 __m128d _mm256_extractf128_pd (__m256d a, const int imm8)
vextractf128 __m128 _mm256_extractf128_ps (__m256 a, const int imm8)
vextractf128 __m128i _mm256_extractf128_si256 (__m256i a, const int imm8)
vextracti128 __m128i _mm256_extracti128_si256 (__m256i a, const int imm8)
vroundpd __m256d _mm256_floor_pd (__m256d a)
vroundps __m256 _mm256_floor_ps (__m256 a)
vphaddw __m256i _mm256_hadd_epi16 (__m256i a, __m256i b)
vphaddd __m256i _mm256_hadd_epi32 (__m256i a, __m256i b)
vhaddpd __m256d _mm256_hadd_pd (__m256d a, __m256d b)
vhaddps __m256 _mm256_hadd_ps (__m256 a, __m256 b)
vphaddsw __m256i _mm256_hadds_epi16 (__m256i a, __m256i b)
vphsubw __m256i _mm256_hsub_epi16 (__m256i a, __m256i b)
vphsubd __m256i _mm256_hsub_epi32 (__m256i a, __m256i b)
vhsubpd __m256d _mm256_hsub_pd (__m256d a, __m256d b)
vhsubps __m256 _mm256_hsub_ps (__m256 a, __m256 b)
vphsubsw __m256i _mm256_hsubs_epi16 (__m256i a, __m256i b)
vpgatherdd __m128i _mm_i32gather_epi32 (int const* base_addr, __m128i vindex, const int scale)
vpgatherdd __m128i _mm_mask_i32gather_epi32 (__m128i src, int const* base_addr, __m128i vindex, __m128i mask, const int scale)
vpgatherdd __m256i _mm256_i32gather_epi32 (int const* base_addr, __m256i vindex, const int scale)
vpgatherdd __m256i _mm256_mask_i32gather_epi32 (__m256i src, int const* base_addr, __m256i vindex, __m256i mask, const int scale)
vpgatherdq __m128i _mm_i32gather_epi64 (__int64 const* base_addr, __m128i vindex, const int scale)
vpgatherdq __m128i _mm_mask_i32gather_epi64 (__m128i src, __int64 const* base_addr, __m128i vindex, __m128i mask, const int scale)
vpgatherdq __m256i _mm256_i32gather_epi64 (__int64 const* base_addr, __m128i vindex, const int scale)
vpgatherdq __m256i _mm256_mask_i32gather_epi64 (__m256i src, __int64 const* base_addr, __m128i vindex, __m256i mask, const int scale)
vgatherdpd __m128d _mm_i32gather_pd (double const* base_addr, __m128i vindex, const int scale)
vgatherdpd __m128d _mm_mask_i32gather_pd (__m128d src, double const* base_addr, __m128i vindex, __m128d mask, const int scale)
vgatherdpd __m256d _mm256_i32gather_pd (double const* base_addr, __m128i vindex, const int scale)
vgatherdpd __m256d _mm256_mask_i32gather_pd (__m256d src, double const* base_addr, __m128i vindex, __m256d mask, const int scale)
vgatherdps __m128 _mm_i32gather_ps (float const* base_addr, __m128i vindex, const int scale)
vgatherdps __m128 _mm_mask_i32gather_ps (__m128 src, float const* base_addr, __m128i vindex, __m128 mask, const int scale)
vgatherdps __m256 _mm256_i32gather_ps (float const* base_addr, __m256i vindex, const int scale)
vgatherdps __m256 _mm256_mask_i32gather_ps (__m256 src, float const* base_addr, __m256i vindex, __m256 mask, const int scale)
vpgatherqd __m128i _mm_i64gather_epi32 (int const* base_addr, __m128i vindex, const int scale)
vpgatherqd __m128i _mm_mask_i64gather_epi32 (__m128i src, int const* base_addr, __m128i vindex, __m128i mask, const int scale)
vpgatherqd __m128i _mm256_i64gather_epi32 (int const* base_addr, __m256i vindex, const int scale)
vpgatherqd __m128i _mm256_mask_i64gather_epi32 (__m128i src, int const* base_addr, __m256i vindex, __m128i mask, const int scale)
vpgatherqq __m128i _mm_i64gather_epi64 (__int64 const* base_addr, __m128i vindex, const int scale)
vpgatherqq __m128i _mm_mask_i64gather_epi64 (__m128i src, __int64 const* base_addr, __m128i vindex, __m128i mask, const int scale)
vpgatherqq __m256i _mm256_i64gather_epi64 (__int64 const* base_addr, __m256i vindex, const int scale)
vpgatherqq __m256i _mm256_mask_i64gather_epi64 (__m256i src, __int64 const* base_addr, __m256i vindex, __m256i mask, const int scale)
vgatherqpd __m128d _mm_i64gather_pd (double const* base_addr, __m128i vindex, const int scale)
vgatherqpd __m128d _mm_mask_i64gather_pd (__m128d src, double const* base_addr, __m128i vindex, __m128d mask, const int scale)
vgatherqpd __m256d _mm256_i64gather_pd (double const* base_addr, __m256i vindex, const int scale)
vgatherqpd __m256d _mm256_mask_i64gather_pd (__m256d src, double const* base_addr, __m256i vindex, __m256d mask, const int scale)
vgatherqps __m128 _mm_i64gather_ps (float const* base_addr, __m128i vindex, const int scale)
vgatherqps __m128 _mm_mask_i64gather_ps (__m128 src, float const* base_addr, __m128i vindex, __m128 mask, const int scale)
vgatherqps __m128 _mm256_i64gather_ps (float const* base_addr, __m256i vindex, const int scale)
vgatherqps __m128 _mm256_mask_i64gather_ps (__m128 src, float const* base_addr, __m256i vindex, __m128 mask, const int scale)
... __m256i _mm256_insert_epi16 (__m256i a, __int16 i, const int index)
... __m256i _mm256_insert_epi32 (__m256i a, __int32 i, const int index)
... __m256i _mm256_insert_epi64 (__m256i a, __int64 i, const int index)
... __m256i _mm256_insert_epi8 (__m256i a, __int8 i, const int index)
vinsertf128 __m256d _mm256_insertf128_pd (__m256d a, __m128d b, int imm8)
vinsertf128 __m256 _mm256_insertf128_ps (__m256 a, __m128 b, int imm8)
vinsertf128 __m256i _mm256_insertf128_si256 (__m256i a, __m128i b, int imm8)
vinserti128 __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8)
vlddqu __m256i _mm256_lddqu_si256 (__m256i const * mem_addr)
vmovapd __m256d _mm256_load_pd (double const * mem_addr)
vmovaps __m256 _mm256_load_ps (float const * mem_addr)
vmovdqa __m256i _mm256_load_si256 (__m256i const * mem_addr)
vmovupd __m256d _mm256_loadu_pd (double const * mem_addr)
vmovups __m256 _mm256_loadu_ps (float const * mem_addr)
vmovdqu __m256i _mm256_loadu_si256 (__m256i const * mem_addr)
... __m256 _mm256_loadu2_m128 (float const* hiaddr, float const* loaddr)
... __m256d _mm256_loadu2_m128d (double const* hiaddr, double const* loaddr)
... __m256i _mm256_loadu2_m128i (__m128i const* hiaddr, __m128i const* loaddr)
vpmaddwd __m256i _mm256_madd_epi16 (__m256i a, __m256i b)
vpmaddubsw __m256i _mm256_maddubs_epi16 (__m256i a, __m256i b)
vpmaskmovd __m128i _mm_maskload_epi32 (int const* mem_addr, __m128i mask)
vpmaskmovd __m256i _mm256_maskload_epi32 (int const* mem_addr, __m256i mask)
vpmaskmovq __m128i _mm_maskload_epi64 (__int64 const* mem_addr, __m128i mask)
vpmaskmovq __m256i _mm256_maskload_epi64 (__int64 const* mem_addr, __m256i mask)
vmaskmovpd __m128d _mm_maskload_pd (double const * mem_addr, __m128i mask)
vmaskmovpd __m256d _mm256_maskload_pd (double const * mem_addr, __m256i mask)
vmaskmovps __m128 _mm_maskload_ps (float const * mem_addr, __m128i mask)
vmaskmovps __m256 _mm256_maskload_ps (float const * mem_addr, __m256i mask)
vpmaskmovd void _mm_maskstore_epi32 (int* mem_addr, __m128i mask, __m128i a)
vpmaskmovd void _mm256_maskstore_epi32 (int* mem_addr, __m256i mask, __m256i a)
vpmaskmovq void _mm_maskstore_epi64 (__int64* mem_addr, __m128i mask, __m128i a)
vpmaskmovq void _mm256_maskstore_epi64 (__int64* mem_addr, __m256i mask, __m256i a)
vmaskmovpd void _mm_maskstore_pd (double * mem_addr, __m128i mask, __m128d a)
vmaskmovpd void _mm256_maskstore_pd (double * mem_addr, __m256i mask, __m256d a)
vmaskmovps void _mm_maskstore_ps (float * mem_addr, __m128i mask, __m128 a)
vmaskmovps void _mm256_maskstore_ps (float * mem_addr, __m256i mask, __m256 a)
vpmaxsw __m256i _mm256_max_epi16 (__m256i a, __m256i b)
vpmaxsd __m256i _mm256_max_epi32 (__m256i a, __m256i b)
vpmaxsb __m256i _mm256_max_epi8 (__m256i a, __m256i b)
vpmaxuw __m256i _mm256_max_epu16 (__m256i a, __m256i b)
vpmaxud __m256i _mm256_max_epu32 (__m256i a, __m256i b)
vpmaxub __m256i _mm256_max_epu8 (__m256i a, __m256i b)
vmaxpd __m256d _mm256_max_pd (__m256d a, __m256d b)
vmaxps __m256 _mm256_max_ps (__m256 a, __m256 b)
vpminsw __m256i _mm256_min_epi16 (__m256i a, __m256i b)
vpminsd __m256i _mm256_min_epi32 (__m256i a, __m256i b)
vpminsb __m256i _mm256_min_epi8 (__m256i a, __m256i b)
vpminuw __m256i _mm256_min_epu16 (__m256i a, __m256i b)
vpminud __m256i _mm256_min_epu32 (__m256i a, __m256i b)
vpminub __m256i _mm256_min_epu8 (__m256i a, __m256i b)
vminpd __m256d _mm256_min_pd (__m256d a, __m256d b)
vminps __m256 _mm256_min_ps (__m256 a, __m256 b)
vmovddup __m256d _mm256_movedup_pd (__m256d a)
vmovshdup __m256 _mm256_movehdup_ps (__m256 a)
vmovsldup __m256 _mm256_moveldup_ps (__m256 a)
vpmovmskb int _mm256_movemask_epi8 (__m256i a)
vmovmskpd int _mm256_movemask_pd (__m256d a)
vmovmskps int _mm256_movemask_ps (__m256 a)
vmpsadbw __m256i _mm256_mpsadbw_epu8 (__m256i a, __m256i b, const int imm8)
vpmuldq __m256i _mm256_mul_epi32 (__m256i a, __m256i b)
vpmuludq __m256i _mm256_mul_epu32 (__m256i a, __m256i b)
vmulpd __m256d _mm256_mul_pd (__m256d a, __m256d b)
vmulps __m256 _mm256_mul_ps (__m256 a, __m256 b)
vpmulhw __m256i _mm256_mulhi_epi16 (__m256i a, __m256i b)
vpmulhuw __m256i _mm256_mulhi_epu16 (__m256i a, __m256i b)
vpmulhrsw __m256i _mm256_mulhrs_epi16 (__m256i a, __m256i b)
vpmullw __m256i _mm256_mullo_epi16 (__m256i a, __m256i b)
vpmulld __m256i _mm256_mullo_epi32 (__m256i a, __m256i b)
vorpd __m256d _mm256_or_pd (__m256d a, __m256d b)
vorps __m256 _mm256_or_ps (__m256 a, __m256 b)
vpor __m256i _mm256_or_si256 (__m256i a, __m256i b)
vpacksswb __m256i _mm256_packs_epi16 (__m256i a, __m256i b)
vpackssdw __m256i _mm256_packs_epi32 (__m256i a, __m256i b)
vpackuswb __m256i _mm256_packus_epi16 (__m256i a, __m256i b)
vpackusdw __m256i _mm256_packus_epi32 (__m256i a, __m256i b)
vpermilpd __m128d _mm_permute_pd (__m128d a, int imm8)
vpermilpd __m256d _mm256_permute_pd (__m256d a, int imm8)
vpermilps __m128 _mm_permute_ps (__m128 a, int imm8)
vpermilps __m256 _mm256_permute_ps (__m256 a, int imm8)
vperm2f128 __m256d _mm256_permute2f128_pd (__m256d a, __m256d b, int imm8)
vperm2f128 __m256 _mm256_permute2f128_ps (__m256 a, __m256 b, int imm8)
vperm2f128 __m256i _mm256_permute2f128_si256 (__m256i a, __m256i b, int imm8)
vperm2i128 __m256i _mm256_permute2x128_si256 (__m256i a, __m256i b, const int imm8)
vpermq __m256i _mm256_permute4x64_epi64 (__m256i a, const int imm8)
vpermpd __m256d _mm256_permute4x64_pd (__m256d a, const int imm8)
vpermilpd __m128d _mm_permutevar_pd (__m128d a, __m128i b)
vpermilpd __m256d _mm256_permutevar_pd (__m256d a, __m256i b)
vpermilps __m128 _mm_permutevar_ps (__m128 a, __m128i b)
vpermilps __m256 _mm256_permutevar_ps (__m256 a, __m256i b)
vpermd __m256i _mm256_permutevar8x32_epi32 (__m256i a, __m256i idx)
vpermps __m256 _mm256_permutevar8x32_ps (__m256 a, __m256i idx)
vrcpps __m256 _mm256_rcp_ps (__m256 a)
vroundpd __m256d _mm256_round_pd (__m256d a, int rounding)
vroundps __m256 _mm256_round_ps (__m256 a, int rounding)
vrsqrtps __m256 _mm256_rsqrt_ps (__m256 a)
vpsadbw __m256i _mm256_sad_epu8 (__m256i a, __m256i b)
... __m256i _mm256_set_epi16 (short e15, short e14, short e13, short e12, short e11, short e10, short e9, short e8, short e7, short e6, short e5, short e4, short e3, short e2, short e1, short e0)
... __m256i _mm256_set_epi32 (int e7, int e6, int e5, int e4, int e3, int e2, int e1, int e0)
... __m256i _mm256_set_epi64x (__int64 e3, __int64 e2, __int64 e1, __int64 e0)
... __m256i _mm256_set_epi8 (char e31, char e30, char e29, char e28, char e27, char e26, char e25, char e24, char e23, char e22, char e21, char e20, char e19, char e18, char e17, char e16, char e15, char e14, char e13, char e12, char e11, char e10, char e9, char e8, char e7, char e6, char e5, char e4, char e3, char e2, char e1, char e0)
vinsertf128 __m256 _mm256_set_m128 (__m128 hi, __m128 lo)
vinsertf128 __m256d _mm256_set_m128d (__m128d hi, __m128d lo)
vinsertf128 __m256i _mm256_set_m128i (__m128i hi, __m128i lo)
... __m256d _mm256_set_pd (double e3, double e2, double e1, double e0)
... __m256 _mm256_set_ps (float e7, float e6, float e5, float e4, float e3, float e2, float e1, float e0)
... __m256i _mm256_set1_epi16 (short a)
... __m256i _mm256_set1_epi32 (int a)
... __m256i _mm256_set1_epi64x (long long a)
... __m256i _mm256_set1_epi8 (char a)
... __m256d _mm256_set1_pd (double a)
... __m256 _mm256_set1_ps (float a)
... __m256i _mm256_setr_epi16 (short e15, short e14, short e13, short e12, short e11, short e10, short e9, short e8, short e7, short e6, short e5, short e4, short e3, short e2, short e1, short e0)
... __m256i _mm256_setr_epi32 (int e7, int e6, int e5, int e4, int e3, int e2, int e1, int e0)
... __m256i _mm256_setr_epi64x (__int64 e3, __int64 e2, __int64 e1, __int64 e0)
... __m256i _mm256_setr_epi8 (char e31, char e30, char e29, char e28, char e27, char e26, char e25, char e24, char e23, char e22, char e21, char e20, char e19, char e18, char e17, char e16, char e15, char e14, char e13, char e12, char e11, char e10, char e9, char e8, char e7, char e6, char e5, char e4, char e3, char e2, char e1, char e0)
vinsertf128 __m256 _mm256_setr_m128 (__m128 lo, __m128 hi)
vinsertf128 __m256d _mm256_setr_m128d (__m128d lo, __m128d hi)
vinsertf128 __m256i _mm256_setr_m128i (__m128i lo, __m128i hi)
... __m256d _mm256_setr_pd (double e3, double e2, double e1, double e0)
... __m256 _mm256_setr_ps (float e7, float e6, float e5, float e4, float e3, float e2, float e1, float e0)
vxorpd __m256d _mm256_setzero_pd (void)
vxorps __m256 _mm256_setzero_ps (void)
vpxor __m256i _mm256_setzero_si256 (void)
vpshufd __m256i _mm256_shuffle_epi32 (__m256i a, const int imm8)
vpshufb __m256i _mm256_shuffle_epi8 (__m256i a, __m256i b)
vshufpd __m256d _mm256_shuffle_pd (__m256d a, __m256d b, const int imm8)
vshufps __m256 _mm256_shuffle_ps (__m256 a, __m256 b, const int imm8)
vpshufhw __m256i _mm256_shufflehi_epi16 (__m256i a, const int imm8)
vpshuflw __m256i _mm256_shufflelo_epi16 (__m256i a, const int imm8)
vpsignw __m256i _mm256_sign_epi16 (__m256i a, __m256i b)
vpsignd __m256i _mm256_sign_epi32 (__m256i a, __m256i b)
vpsignb __m256i _mm256_sign_epi8 (__m256i a, __m256i b)
vpsllw __m256i _mm256_sll_epi16 (__m256i a, __m128i count)
vpslld __m256i _mm256_sll_epi32 (__m256i a, __m128i count)
vpsllq __m256i _mm256_sll_epi64 (__m256i a, __m128i count)
vpsllw __m256i _mm256_slli_epi16 (__m256i a, int imm8)
vpslld __m256i _mm256_slli_epi32 (__m256i a, int imm8)
vpsllq __m256i _mm256_slli_epi64 (__m256i a, int imm8)
vpslldq __m256i _mm256_slli_si256 (__m256i a, const int imm8)
vpsllvd __m128i _mm_sllv_epi32 (__m128i a, __m128i count)
vpsllvd __m256i _mm256_sllv_epi32 (__m256i a, __m256i count)
vpsllvq __m128i _mm_sllv_epi64 (__m128i a, __m128i count)
vpsllvq __m256i _mm256_sllv_epi64 (__m256i a, __m256i count)
vsqrtpd __m256d _mm256_sqrt_pd (__m256d a)
vsqrtps __m256 _mm256_sqrt_ps (__m256 a)
vpsraw __m256i _mm256_sra_epi16 (__m256i a, __m128i count)
vpsrad __m256i _mm256_sra_epi32 (__m256i a, __m128i count)
vpsraw __m256i _mm256_srai_epi16 (__m256i a, int imm8)
vpsrad __m256i _mm256_srai_epi32 (__m256i a, int imm8)
vpsravd __m128i _mm_srav_epi32 (__m128i a, __m128i count)
vpsravd __m256i _mm256_srav_epi32 (__m256i a, __m256i count)
vpsrlw __m256i _mm256_srl_epi16 (__m256i a, __m128i count)
vpsrld __m256i _mm256_srl_epi32 (__m256i a, __m128i count)
vpsrlq __m256i _mm256_srl_epi64 (__m256i a, __m128i count)
vpsrlw __m256i _mm256_srli_epi16 (__m256i a, int imm8)
vpsrld __m256i _mm256_srli_epi32 (__m256i a, int imm8)
vpsrlq __m256i _mm256_srli_epi64 (__m256i a, int imm8)
vpsrldq __m256i _mm256_srli_si256 (__m256i a, const int imm8)
vpsrlvd __m128i _mm_srlv_epi32 (__m128i a, __m128i count)
vpsrlvd __m256i _mm256_srlv_epi32 (__m256i a, __m256i count)
vpsrlvq __m128i _mm_srlv_epi64 (__m128i a, __m128i count)
vpsrlvq __m256i _mm256_srlv_epi64 (__m256i a, __m256i count)
vmovapd void _mm256_store_pd (double * mem_addr, __m256d a)
vmovaps void _mm256_store_ps (float * mem_addr, __m256 a)
vmovdqa void _mm256_store_si256 (__m256i * mem_addr, __m256i a)
vmovupd void _mm256_storeu_pd (double * mem_addr, __m256d a)
vmovups void _mm256_storeu_ps (float * mem_addr, __m256 a)
vmovdqu void _mm256_storeu_si256 (__m256i * mem_addr, __m256i a)
... void _mm256_storeu2_m128 (float* hiaddr, float* loaddr, __m256 a)
... void _mm256_storeu2_m128d (double* hiaddr, double* loaddr, __m256d a)
... void _mm256_storeu2_m128i (__m128i* hiaddr, __m128i* loaddr, __m256i a)
vmovntdqa __m256i _mm256_stream_load_si256 (__m256i const* mem_addr)
vmovntpd void _mm256_stream_pd (double * mem_addr, __m256d a)
vmovntps void _mm256_stream_ps (float * mem_addr, __m256 a)
vmovntdq void _mm256_stream_si256 (__m256i * mem_addr, __m256i a)
vpsubw __m256i _mm256_sub_epi16 (__m256i a, __m256i b)
vpsubd __m256i _mm256_sub_epi32 (__m256i a, __m256i b)
vpsubq __m256i _mm256_sub_epi64 (__m256i a, __m256i b)
vpsubb __m256i _mm256_sub_epi8 (__m256i a, __m256i b)
vsubpd __m256d _mm256_sub_pd (__m256d a, __m256d b)
vsubps __m256 _mm256_sub_ps (__m256 a, __m256 b)
vpsubsw __m256i _mm256_subs_epi16 (__m256i a, __m256i b)
vpsubsb __m256i _mm256_subs_epi8 (__m256i a, __m256i b)
vpsubusw __m256i _mm256_subs_epu16 (__m256i a, __m256i b)
vpsubusb __m256i _mm256_subs_epu8 (__m256i a, __m256i b)
vtestpd int _mm_testc_pd (__m128d a, __m128d b)
vtestpd int _mm256_testc_pd (__m256d a, __m256d b)
vtestps int _mm_testc_ps (__m128 a, __m128 b)
vtestps int _mm256_testc_ps (__m256 a, __m256 b)
vptest int _mm256_testc_si256 (__m256i a, __m256i b)
vtestpd int _mm_testnzc_pd (__m128d a, __m128d b)
vtestpd int _mm256_testnzc_pd (__m256d a, __m256d b)
vtestps int _mm_testnzc_ps (__m128 a, __m128 b)
vtestps int _mm256_testnzc_ps (__m256 a, __m256 b)
vptest int _mm256_testnzc_si256 (__m256i a, __m256i b)
vtestpd int _mm_testz_pd (__m128d a, __m128d b)
vtestpd int _mm256_testz_pd (__m256d a, __m256d b)
vtestps int _mm_testz_ps (__m128 a, __m128 b)
vtestps int _mm256_testz_ps (__m256 a, __m256 b)
vptest int _mm256_testz_si256 (__m256i a, __m256i b)
NA __m256d _mm256_undefined_pd (void)
NA __m256 _mm256_undefined_ps (void)
NA __m256i _mm256_undefined_si256 (void)
vpunpckhwd __m256i _mm256_unpackhi_epi16 (__m256i a, __m256i b)
vpunpckhdq __m256i _mm256_unpackhi_epi32 (__m256i a, __m256i b)
vpunpckhqdq __m256i _mm256_unpackhi_epi64 (__m256i a, __m256i b)
vpunpckhbw __m256i _mm256_unpackhi_epi8 (__m256i a, __m256i b)
vunpckhpd __m256d _mm256_unpackhi_pd (__m256d a, __m256d b)
vunpckhps __m256 _mm256_unpackhi_ps (__m256 a, __m256 b)
vpunpcklwd __m256i _mm256_unpacklo_epi16 (__m256i a, __m256i b)
vpunpckldq __m256i _mm256_unpacklo_epi32 (__m256i a, __m256i b)
vpunpcklqdq __m256i _mm256_unpacklo_epi64 (__m256i a, __m256i b)
vpunpcklbw __m256i _mm256_unpacklo_epi8 (__m256i a, __m256i b)
vunpcklpd __m256d _mm256_unpacklo_pd (__m256d a, __m256d b)
vunpcklps __m256 _mm256_unpacklo_ps (__m256 a, __m256 b)
vxorpd __m256d _mm256_xor_pd (__m256d a, __m256d b)
vxorps __m256 _mm256_xor_ps (__m256 a, __m256 b)
vpxor __m256i _mm256_xor_si256 (__m256i a, __m256i b)
vzeroall void _mm256_zeroall (void)
vzeroupper void _mm256_zeroupper (void)
NA __m256d _mm256_zextpd128_pd256 (__m128d a)
NA __m256 _mm256_zextps128_ps256 (__m128 a)
NA __m256i _mm256_zextsi128_si256 (__m128i a)
```