Skip to content

Commit 37efeae

Browse files
committed
Define AVX broadcast intrinsics
This defines `_mm256_broadcast_ps` and `_mm256_broadcast_pd`. The `_ss` and `_sd` variants are not supported by LLVM. In Clang these intrinsics are implemented as inline functions in C++. Intel reference: https://software.intel.com/en-us/node/514144. Note: the argument type should really be "0hPc" (a pointer to a vector of half the width), but internally the LLVM intrinsic takes a pointer to a signed integer, and for any other type LLVM will complain. This means that a transmute is required to call these intrinsics. The AVX2 broadcast intrinsics `_mm256_broadcastss_ps` and `_mm256_broadcastsd_pd` are not available as LLVM intrinsics. In Clang they are implemented using the shufflevector builtin.
1 parent 8f0479b commit 37efeae

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/etc/platform-intrinsics/x86/avx.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@
88
"ret": "f(32-64)",
99
"args": ["0", "0"]
1010
},
11+
{
12+
"intrinsic": "256_broadcast_{0.data_type}",
13+
"width": [256],
14+
"llvm": "vbroadcastf128.{0.data_type}.256",
15+
"ret": "f(32-64)",
16+
"args": ["s8SPc"]
17+
},
1118
{
1219
"intrinsic": "256_dp_ps",
1320
"width": [256],

0 commit comments

Comments
 (0)